Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从由不同光栅确定的光栅堆栈层中提取值';s像素值_R_Gis_Raster - Fatal编程技术网

R 从由不同光栅确定的光栅堆栈层中提取值';s像素值

R 从由不同光栅确定的光栅堆栈层中提取值';s像素值,r,gis,raster,R,Gis,Raster,我们有一个光栅,它表示与生长季节开始对应的顺序日期。也就是说,光栅中的每个像素值位于1:365之间,表示顺序日期 我还计算了相应年份中所有365天的累计学位增长天数。这些数据作为365层的光栅堆栈加载到R中 我的目标是在生长季节开始时随机取样地理位置。然后,我希望从这些相同的坐标中提取累积生长度天数的值,但仅从生长度天数堆栈的对应于季节开始像素值的层中提取 例如,如果给定像素的季节开始时间是一年中的第100天,我希望在一年中的第100天从该位置提取生长度天数(nlayers=100) 我一直在尝

我们有一个光栅,它表示与生长季节开始对应的顺序日期。也就是说,光栅中的每个像素值位于1:365之间,表示顺序日期

我还计算了相应年份中所有365天的累计学位增长天数。这些数据作为365层的光栅堆栈加载到R中

我的目标是在生长季节开始时随机取样地理位置。然后,我希望从这些相同的坐标中提取累积生长度天数的值,但仅从生长度天数堆栈的对应于季节开始像素值的层中提取

例如,如果给定像素的季节开始时间是一年中的第100天,我希望在一年中的第100天从该位置提取生长度天数(nlayers=100)

我一直在尝试编写一个函数来实现这一点,但我似乎无法让它正常工作。我想以一个数据框或矩阵结束,显示我的x位置、y位置、赛季开始日和当天的GDD。我得到的不是一列中的许多GDD值,而是一个GDD值的许多列

问题似乎出在我对提取物的使用上。我用参数nl、layer进行了实验,并用[[]]对x参数进行了索引。它们似乎产生了同样的结果。这是一个简单的代码,只需考虑5天,以及我正在尝试构建的函数。 欢迎提供任何帮助/建议

#============================================================
library(raster)

SOST <- raster()
SOST[] <- 1:5

r1 <- r2 <- r3 <- r4 <- r5 <- raster()
r1[] <- 10
r2[] <- 20
r3[] <- 30
r4[] <- 40
r5[] <- 50
GDD <- stack(r1,r2,r3,r4,r5)

getGDD <- function(sost, gdd, n){set.seed(232)
        samp <- sampleRandom(sost, n, xy = TRUE, 
        na.rm = TRUE)

        df <- data.frame('x'=as.numeric(), 'y'=
        as.numeric(), 'SOST'=as.numeric(), 
        'GDD'=as.numeric())


        df.temp <- data.frame('x' = samp[1:n,1], 'y' = 
        samp[1:n,2], 'SOST' = samp[,3],'GDD' = 
        extract(gdd, samp[1:n,1:2], nl = samp[1:n,3]))

        df <- rbind(df, df.temp)
        return(df)
                                    }

getGDD(sost = SOST, gdd = GDD, n = 5)
#============================================================
图书馆(光栅)

SOST这似乎没有引起太多的注意,但我能够解决它。使用原始问题中的示例,最简单的解决方案是
stackSelect
函数。罗伯特·希曼斯在R-sig-geo上向我指出了这一点

x <- stackSelect(GDD, SOST)

set.seed(232)
samp <- sampleRandom(SOST, 5, xy = TRUE, na.rm = TRUE)[, -3]
extract(x, samp)
x
library(raster)
#SOST and GDD simulations with same ncell and extents as actual data:

SOST <- raster(nrow = 3991, ncol = 3025, xmn = 688635, xmx = 779385, 
ymn = 4276125, ymx = 4395855, crs = "+proj=utm +zone=11 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0")
SOST[] <- 1:5

r1 <- r2 <- r3 <- r4 <- r5 <- raster(nrow = 3951, ncol = 2995, xmn = 688620.2, xmx = 779377.8, ymn = 4276121, ymx = 4395848, crs = "+proj=utm +zone=11 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0")
r1[] <- 10
r2[] <- 20
r3[] <- 30
r4[] <- 40
r5[] <- 50
GDD <- stack(r1,r2,r3,r4,r5)

getGDD <- function(sost, gdd, n){
      set.seed(232)
      samp <- sampleRandom(sost, size = n, xy = TRUE)

      extr <- NULL
      for(i in 1:n){ 
      extr[i] <- extract(gdd[[samp[i,3]]], cbind(as.matrix(samp[i,1]),
                 as.matrix(samp[i,2]))) 
      }

      out <- data.frame(x = samp[,1], y = samp[,2], 'SOST' = samp[,3], 'GDD' = extr)
      return(out)
      }

test <- getGDD(sost = SOST, gdd = GDD, n = 5)
test