I have created a subset of the big matrix and tile.xy then ran the code again.
#> library(bigmemory)
#>
#>
#> #Load the script needed to run do_pixel
#> source("~/Work/dopixel_2020.R")
#>
#>
#> #--load dates which are in R date format
#> ERA.dates <- readRDS("~/Work/ERA.dates.rds") #240 dates
#>
#> #Load environmental variables
#>
#> ts.evi <- readRDS("~/Work/ts.evi.rds")
#> tile.xy <- readRDS("~/Work/tile.xy.rds")
#> ts.moist1 <- readRDS("~/Work/ts.moist1.rds")
#> ts.moist2 <- readRDS("~/Work/ts.moist2.rds")
#> ts.srad <- readRDS("~/Work/ts.srad.rds")
#> ts.tair <- readRDS("~/Work/ts.tair.rds")
#> ts.tsoil <- readRDS("~/Work/ts.tsoil.rds")
#>
#>
#> #------------------------------------------------------------------#
#> #--get date information from the MODIS time series-----------------#
#> #------------------------------------------------------------------#
#> # get the layer names provided by the call to extract evi:
#> layer.names<-labels(ts.evi)[[2]]
#> # take the substring on these names, which give the dates:
#> date.text <-substr(layer.names,start=10,stop=16)
#> date.pos <- strptime(date.text, format = "%Y%j", tz="UTC") #convert to R date format
#>
#>
#> #------------------------------------------------------------------#
#> #--create big matrix to store output of do_pixel-------------------#
#> #------------------------------------------------------------------#
#> pixel.date <- as.Date(seq.POSIXt(ISOdate(2000,6,1),by="week",length.out=1020,tz="UTC"))
#> #tail(pixel.date)
#> YEAR <- as.numeric(format(pixel.date, "%Y"))
#> YITS = length(unique(YEAR))
#> #--the column names for the big matrix
#> names<-c("lon","lat",
#> "lq", "uq", "mean.evi", "sd.evi", "sum.evi", "amplitude",
#> "peak.day", "trough.day",
#> paste("td", 1:YITS, sep="."), paste("td.x", 1:YITS, sep="."), paste("td.evi", 1:YITS, sep="."),
#> paste("pd", 1:YITS, sep="."), paste("pd.x", 1:YITS, sep="."), paste("pd.evi", 1:YITS, sep="."),
#> paste("elon.m", 1:YITS, sep="."), paste("elon.m.x", 1:YITS, sep="."),
#> paste("eoff.m", 1:YITS, sep="."), paste("eoff.m.x", 1:YITS, sep="."),
#> paste("elon.f", 1:YITS, sep="."), paste("elon.f.x", 1:YITS, sep="."),
#> paste("eoff.f", 1:YITS, sep="."), paste("eoff.f.x", 1:YITS, sep="."),
#> paste("elon.l", 1:YITS, sep="."), paste("elon.l.x", 1:YITS, sep="."),
#> paste("eoff.l", 1:YITS, sep="."), paste("eoff.l.x", 1:YITS, sep="."),
#> paste("sum.evi.yr", 1:YITS, sep="."), paste("amp", 1:YITS, sep="."),
#> paste("gsl", 1:YITS, sep="."), paste("gsl.peak", 1:YITS, sep="."), paste("gsl.long", 1:YITS, sep="."),
#> paste("elon.f.evi", 1:YITS, sep="."), paste("elon.m.evi", 1:YITS, sep="."), paste("elon.l.evi", 1:YITS, sep="."),
#> paste("eoff.f.evi", 1:YITS, sep="."), paste("eoff.m.evi", 1:YITS, sep="."), paste("eoff.l.evi", 1:YITS, sep="."),
#> paste("tair.rank.td", 1:YITS, sep="."),paste("tair.rank.pd", 1:YITS, sep="."),
#> paste("moist1.rank.td", 1:YITS, sep="."),paste("moist1.rank.pd", 1:YITS, sep=".")
#> )
#> #--create the matrix using pixel.df to specifiy rows
#> #--and column names to speciify columns
#> statsMODIS<-big.matrix(nrow=length(tile.xy), ncol=length(names), type="double",
#> dimnames=list(row.names=NULL, col.names=names),
#> backingfile="statsMODIS.bin", descriptorfile="statsMODIS.desc")
#>Loading required package: sp
#>
#> ###########Susbet the big matrix and tile.xy
#>
#> statsMODIS <- sub.big.matrix(statsMODIS, firstRow = 77919, lastRow = 86017)
#> tile.xy <-tile.xy[c(77919:86017),]
#> dim(statsMODIS)
#>[1] 8099 670
#> #------------------------------------------------------------------#
#> #--start a for loop that will call do_pixel------------------------#
#> #--this will be slow, but its useful for debugging-----------------#
#> #------------------------------------------------------------------#
#> ERA.dates <- ERA.dates+14
#>
#> ### 1st iteration
#>
#> p <- 77919
#>
#> print(p)
#> [1] 77919
#>
#> #-1-create a data.frame for the pixel
#> pixel.df = data.frame(date = pixel.date)
#> #-2-create an approx function for each ERA variable
#> af.tair = approxfun(ERA.dates,ts.tair[1,])
#> af.tsoil = approxfun(ERA.dates,ts.tsoil[1,])
#> af.srad = approxfun(ERA.dates,ts.srad[1,])
#> af.moist1 = approxfun(ERA.dates,ts.moist1[1,])
#> af.moist2 = approxfun(ERA.dates,ts.moist2[1,])
#> #-3-create an approx function for the EVI data
#> af.evi = approxfun(as.Date(date.pos),ts.evi[p,])
#> #-4-use the approxfun's to fill the data frame data.frame
#> pixel.df$tair <- af.tair(as.Date(pixel.date))
#> pixel.df$tsoil <- af.tsoil(as.Date(pixel.date))
#> pixel.df$srad <- af.srad(as.Date(pixel.date))
#> pixel.df$moist1 <- af.moist1(as.Date(pixel.date))
#> pixel.df$moist2 <- af.moist2(as.Date(pixel.date))
#> pixel.df$evi <- af.evi(as.Date(pixel.date))
#> pixel.df<-pixel.df[complete.cases(pixel.df),]
#>
#> coords<-round(coordinates(tile.xy)[p,],2)
#> Error in coordinates(tile.xy)[p, ] : subscript out of bounds
#>
#> print("before")
#> [1] "before"
#>
#> print(paste(c("statsModis:", typeof(statsMODIS[p,]))))
#>Error in GetRows.bm(x, i) : Illegal row index usage in extraction.
#> print(paste(c("statsModis:", class(statsMODIS[p,]))))
#>Error in GetRows.bm(x, i) : Illegal row index usage in extraction.
#> print(paste(c("statsModis:", dim(statsMODIS[p,]))))
#>Error in GetRows.bm(x, i) : Illegal row index usage in extraction.
#> print(paste(c("statsModis:", length(statsMODIS[p,]))))
#>Error in GetRows.bm(x, i) : Illegal row index usage in extraction.
#> print(paste(c("statsModis:", head(statsMODIS[p,]))))
#> Error in GetRows.bm(x, i) : Illegal row index usage in extraction.
#>
#> print(paste(c("dopixel:", typeof(dopixel(pixel.df,coords,PLOT=FALSE)))))
#>Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found
#>In addition: Warning message:
#>In pd.evi - td.evi[-1] :
#>
#> Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found > print(paste(c("dopixel:", class(dopixel(pixel.df,coords,PLOT=FALSE)))))
#>Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found
#>In addition: Warning message:
#>In pd.evi - td.evi[-1] :
#>
#> Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found > print(paste(c("dopixel:", dim(dopixel(pixel.df,coords,PLOT=FALSE)))))
#>Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found
#>In addition: Warning message:
#>In pd.evi - td.evi[-1] :
#> Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found > print(paste(c("dopixel:", length(dopixel(pixel.df,coords,PLOT=FALSE)))))
#>Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found
#>In addition: Warning message:
#>In pd.evi - td.evi[-1] :
#>
#> Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found > print(paste(c("dopixel:", head(dopixel(pixel.df,coords,PLOT=FALSE)))))
#>Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found
#>In addition: Warning message:
#>In pd.evi - td.evi[-1] :
#>
#> Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found >
#> statsMODIS[p,] <- dopixel(pixel.df,coords,PLOT=FALSE)
#>Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found
#>In addition: Warning message:
#>In pd.evi - td.evi[-1] :
#> longer object length is not a multiple of shorter object length
#>
#> print("after")
#>[1] "after"
#>
#> ### 2nd iteration
#>
#> p <- 77919
#>
#> print(p)
#>[1] 77919
#>
#> #-1-create a data.frame for the pixel
#> pixel.df = data.frame(date = pixel.date)
#> #-2-create an approx function for each ERA variable
#> af.tair = approxfun(ERA.dates,ts.tair[1,])
#> af.tsoil = approxfun(ERA.dates,ts.tsoil[1,])
#> af.srad = approxfun(ERA.dates,ts.srad[1,])
#> af.moist1 = approxfun(ERA.dates,ts.moist1[1,])
#> af.moist2 = approxfun(ERA.dates,ts.moist2[1,])
#> #-3-create an approx function for the EVI data
#> af.evi = approxfun(as.Date(date.pos),ts.evi[p,])
#> #-4-use the approxfun's to fill the data frame data.frame
#> pixel.df$tair <- af.tair(as.Date(pixel.date))
#> pixel.df$tsoil <- af.tsoil(as.Date(pixel.date))
#> pixel.df$srad <- af.srad(as.Date(pixel.date))
#> pixel.df$moist1 <- af.moist1(as.Date(pixel.date))
#> pixel.df$moist2 <- af.moist2(as.Date(pixel.date))
#> pixel.df$evi <- af.evi(as.Date(pixel.date))
#> pixel.df<-pixel.df[complete.cases(pixel.df),]
#>
#> coords<-round(coordinates(tile.xy)[p,],2)
#>Error in coordinates(tile.xy)[p, ] : subscript out of bounds
#>
#> print("before")
#>[1] "before"
#>
#> print(paste(c("statsModis:", typeof(statsMODIS[p,]))))
#>Error in GetRows.bm(x, i) : Illegal row index usage in extraction.
#> print(paste(c("statsModis:", class(statsMODIS[p,]))))
#>Error in GetRows.bm(x, i) : Illegal row index usage in extraction.
#> print(paste(c("statsModis:", dim(statsMODIS[p,]))))
#>Error in GetRows.bm(x, i) : Illegal row index usage in extraction.
#> print(paste(c("statsModis:", length(statsMODIS[p,]))))
#>Error in GetRows.bm(x, i) : Illegal row index usage in extraction.
#> print(paste(c("statsModis:", head(statsMODIS[p,]))))
#>Error in GetRows.bm(x, i) : Illegal row index usage in extraction.
#>
#> print(paste(c("dopixel:", typeof(dopixel(pixel.df,coords,PLOT=FALSE)))))
#>Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found
#>In addition: Warning message:
#>In pd.evi - td.evi[-1] :
#>
#> Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found > print(paste(c("dopixel:", class(dopixel(pixel.df,coords,PLOT=FALSE)))))
#>Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found
#>In addition: Warning message:
#>In pd.evi - td.evi[-1] :
#>
#>Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found > print(paste(c("dopixel:", dim(dopixel(pixel.df,coords,PLOT=FALSE)))))
#>Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found
#>In addition: Warning message:
#>In pd.evi - td.evi[-1] :
#>
#> Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found > print(paste(c("dopixel:", length(dopixel(pixel.df,coords,PLOT=FALSE)))))
#>Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found
#>In addition: Warning message:
#>In pd.evi - td.evi[-1] :
#>
#> Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found > print(paste(c("dopixel:", head(dopixel(pixel.df,coords,PLOT=FALSE)))))
#>Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found
#>In addition: Warning message:
#>In pd.evi - td.evi[-1] :
#>
#> Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found >
#> statsMODIS[p,] <- dopixel(pixel.df,coords,PLOT=FALSE)
#>Error in data.frame(coords[1], coords[2], lq, uq, mean.evi, sd.evi, sum.evi, :
#> object 'coords' not found
#>In addition: Warning message:
#>In pd.evi - td.evi[-1] :
#> longer object length is not a multiple of shorter object length
#>
#> print("after")
#>[1] "after"
#> dim(statsMODIS)
#>[1] 8099 670