在栅格列表列表上执行循环

时间:2015-07-21 11:39:42

标签: r list loops raster lapply

需要解决方案,非常感谢帮助。

在下面的代码中,我创建了三个栅格。然后我在此栅格上创建一个随机number点位置,我收到一个三个矩阵的列表,其中坐标为samples的随机位置。然后我获取这些位置并对栅格值进行采样以接收samplevalues

我想要改变的是我想要创建一组100,150,200和250个随机点位置(numberv)。因此,在生成这些位置并接收位置列表后,每个栅格将被采样length(numberv)次(在这种情况下为4次)。因为我有三个栅格,所以我想获得一个包含第一个元素的列表,包括从我的三个栅格中获取的采样值,每个采样100次,第二个栅格值每次采样150次,等等。列表将{{1}元素。然后我会使用这些位置来获取这些位置的栅格值。

我为一个简单的案例粘贴了干净的代码,只有一个样本(使用了1个元素向量length(numberv)),希望它有所帮助。

number

1 个答案:

答案 0 :(得分:2)

这有用吗?

# Function to sample using a given number (returns list of three)
sample.number <- function(x) {
  rps <- lapply(rasters, function(y) randomPoints(raster(y),n=x))
  setNames(rps,paste0('sample',1:length(mv)))
}

# Apply sample.number() to your numberv list
sample.set <- lapply(numberv,sample.number)

# Function to extract values from a given sample
sample.extract <- function(x) {
  lapply(1:length(x),function(y) data.frame(x[[y]],extract(rasters[[y]],x[[y]])))
}

# Apply sample.extract() to the set of samples (returns list of four lists)
sample.values <- lapply(sample.set,sample.extract)

# Access sample 1 of number 200
summary(sample.values[[3]][[1]])