【发布时间】:2020-07-02 11:27:57
【问题描述】:
亲爱的 R 程序员, 我试图在使用特定时将循环转换为应用类型公式 称为 dissever 的函数。它是一种缩小功能,适用于栅格数据。 它需要一个粗略的输入 rasterLayer 和一堆协变量并生成一个模型对象 包括输入 rasterLayer 的高分辨率版本 例如:
library(dissever)
library(raster)
mod.fine = dissever(
coarse = edgeroi$carbon, # coarse resolution raster
fine = edgeroi$predictors, # stack of fine resolution covariates
method = "lm", # regression method used
p = 0.05, # proportion of pixels sampled for training regression model
)
我想使用一堆粗略的输入层,而不是单个 rasterLayer。我可以使用一个循环来拟合一个模型,该模型对粗略堆栈的每一层使用相同的高分辨率预测器堆栈,并且我可以将结果存储在一个列表中。例如。 :
#create the stack of coarse layers
Stack.coarse = stack(edgeroi$carbon,edgeroi$carbon*2)
test = list()
for(i in 1:nlayers(Stack.coarse)) {
tmp=dissever(coarse=Stack.coarse[[i]],fine=edgeroi$predictors,method="lm",p=0.05)
test[[i]]=tmp
}
但我想避免循环,而是想使用应用函数。 栈是一种特殊类型的列表,必要时可以使用 as.list(stack.name) 转换为列表
但是,我找不到允许我使用 lapply 或 mapply 而不是循环的正确语法,因为这些函数似乎只需要一个列表,而输入中有 2 个单独的堆栈(列表)。
有人可以帮忙吗, 莎拉
【问题讨论】:
-
可能是
map2或pmap? purrr.tidyverse.org/reference/map2.html & campus.datacamp.com/courses/… -
你的描述不是很清楚。您是否为每个粗网格单元拟合了一个模型,然后将该模型应用于落入粗网格单元的所有细网格单元? (这将是一个棘手但有趣的问题)。或者你用粗略数据拟合一个全局模型(在这种情况下你可以使用
predict)
标签: r loops regression apply raster