gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:42:51 25 4
gpt4 key购买 nike

需要解决方案,帮助将不胜感激。

在下面的代码中,我创建了三个栅格。然后我创建一个随机 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]]))
}

最佳答案

这行得通吗?

# 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]])

关于r - 在栅格列表列表上执行循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31538038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com