使用 R 中的函数对栅格和位置列表进行采样
Sampling with list of rasters and locations using function in R
这段代码让我汗流浃背。我之前收到过构建它的帮助 。简而言之,我在这里所做的是我随机抽取 numberv
次的三个栅格的列表。因此,输出是一个包含四个列表的列表,每个列表有三个栅格。获得随机点位置后,我将在该位置获取栅格值。
我要解决的问题是我想取第二个样本位置,即sample.set[[1]][2]
并从rasters[1]
获取栅格值。然后我想获取 sample.set[[1]][3]
并从 rasters[2]
获取光栅值。然后 sample.set[[2]][2]
并从 rasters[1]
和 sample.set[[2]][3]
获取栅格值并从 rasters[2]
等获取栅格值。结果将是一个包含 4 个列表的列表,每个列表包含 2 个元素样本 xy 值(位置)和先前的栅格值。
非常感谢您的帮助。
y <- matrix(1:150,50,3)
mv <- c(1,2,3)
rep = 20
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)
numberv = c(10,12,14,16) # sample number vector
# 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)
现在我想使用列表 sample.set
中第二个元素的样本值来对列表中的第一个栅格进行采样 rasters
我试过了但没有成功:
sample.extract.prev <- function(x) {
lapply(1:length(x),function(y) data.frame(x[[y]],
extract(rasters[[y]],x+1[[y]])))
}
sample.values.prev <- lapply(sample.set,sample.extract.prev)
设法解决了这个问题(对我自己来说是高五;)
不幸的是,我设法用一个循环来完成它,如果能看到一个函数的例子会很棒。
samplevaluesnext <- vector("list",length(sample.set))
## Look up values
for (j in 1:length(sample.set)) {
for (i in 1:(length(rasters)-1)) {
samplevaluesnext[[j]][[i]] <- data.frame(sample.set[[j]][[i+1]],
extract(rasters[[i]],
as.data.frame(sample.set[[j]][i+1])))
}
}
这段代码让我汗流浃背。我之前收到过构建它的帮助 numberv
次的三个栅格的列表。因此,输出是一个包含四个列表的列表,每个列表有三个栅格。获得随机点位置后,我将在该位置获取栅格值。
我要解决的问题是我想取第二个样本位置,即sample.set[[1]][2]
并从rasters[1]
获取栅格值。然后我想获取 sample.set[[1]][3]
并从 rasters[2]
获取光栅值。然后 sample.set[[2]][2]
并从 rasters[1]
和 sample.set[[2]][3]
获取栅格值并从 rasters[2]
等获取栅格值。结果将是一个包含 4 个列表的列表,每个列表包含 2 个元素样本 xy 值(位置)和先前的栅格值。
非常感谢您的帮助。
y <- matrix(1:150,50,3)
mv <- c(1,2,3)
rep = 20
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)
numberv = c(10,12,14,16) # sample number vector
# 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)
现在我想使用列表 sample.set
中第二个元素的样本值来对列表中的第一个栅格进行采样 rasters
我试过了但没有成功:
sample.extract.prev <- function(x) {
lapply(1:length(x),function(y) data.frame(x[[y]],
extract(rasters[[y]],x+1[[y]])))
}
sample.values.prev <- lapply(sample.set,sample.extract.prev)
设法解决了这个问题(对我自己来说是高五;) 不幸的是,我设法用一个循环来完成它,如果能看到一个函数的例子会很棒。
samplevaluesnext <- vector("list",length(sample.set))
## Look up values
for (j in 1:length(sample.set)) {
for (i in 1:(length(rasters)-1)) {
samplevaluesnext[[j]][[i]] <- data.frame(sample.set[[j]][[i+1]],
extract(rasters[[i]],
as.data.frame(sample.set[[j]][i+1])))
}
}