MIH*_*MIH 6 loops r list raster lapply
需要解决方案,将非常感谢帮助.
在下面的代码中,我创建了三个栅格.然后我number在这个栅格上创建一个随机的点位置,我收到一个三个矩阵的列表,其中包含那些随机位置的坐标samples.然后,我将这些位置和样本栅格值接收samplevalues.
我想改变的是,我想创建一组100,150,200和250个随机点位置(numberv).因此,在生成这些位置并接收位置列表后,每个栅格将被采样length(numberv) 次数(在这种情况下为4次).因为我有三个栅格,所以我想得到一个列表,第一个元素包括从我的三个栅格中获得的采样值,每个采样100次,第二个栅格值每次采样150次,等等.列表将包含length(numberv)元素.然后我会使用这些位置来获取这些位置的栅格值.
我只用一个样本(使用了1个元素向量number)粘贴了一个简单案例的干净代码,希望它有所帮助.
y <- matrix(1:300,100,3)
mv <- c(1,2,3)
rep = 200
valuematrix <- vector("list",ncol(y))
for (i in 1:ncol(y)) {
newmatrix <- replicate(rep,y[,i])
valuematrix[[i]] <- newmatrix
}
library(sp)
library(raster)
rasters <- setNames(lapply(valuematrix, function(x) raster(x)),
paste0('raster',1:length(mv)))
# Create a loop that will sample the rasters
library(dismo)
number = 100 # current number for random sample points number
numberv = c(100,150,200,250) # sample number vector i want to use
# samples below will hold only coordinate values:
samples <- setNames(lapply(rasters, function(x) randomPoints(raster(x),
n=number)),
paste0('sample',1:length(mv)))
samplevalues <- vector("list",ncol(y))
for (i in 1:ncol(y)) {
samplevalues[[i]] <- data.frame(samples[[i]],extract(rasters[[i]],
samples[[i]]))
}
Run Code Online (Sandbox Code Playgroud)
这有效吗?
# 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]])
Run Code Online (Sandbox Code Playgroud)