我已经为一个问题苦苦挣扎了几个小时,目前我很难找到解决方法。
我想使用包的overlay
功能raster
。此函数根据特定函数(例如数学函数)将多个栅格(或堆栈的栅格层)组合成一个新栅格。
这是一个实际的例子:
library(raster)
# First we create an example raster stack with two layers
a <- matrix(rep(dnorm(1:100, 50, sd = 25)),
nrow = 100, ncol = 100, byrow = TRUE)
env <- stack(raster(a * dnorm(1:100, 50, sd = 25) * 10000),
raster(a * 1:100))
names(env) <- c("variable1", "variable2")
plot(env)
# Second, we combine them with a simple addition
raster3 <- overlay(env, fun = function(variable1, variable2) variable1 + variable2)
plot(raster3)
因此,在上面的示例中,我们的栅格有两个名为variable1
和的变量variable2
,我们将公式variable1 + variable2
应用于它们。
问题
我正在尝试在一个函数中使用覆盖,其中我有:
- 输入栅格堆栈(层数是可变的,以及层的名称)。一个典型的例子是
env
上面的堆栈。 - 公式(公式始终基于输入栅格堆栈的图层名称编写)。典型的例子是
variable1 + variable2
或variable1 * variable2 + 3 * variable1
。
我的(不成功的)尝试
我能够使用以前作为字符串存储在对象中的公式:
form <- "variable1 + 3 * variable2"
raster4 <- overlay(env, fun = function(variable1, variable2) eval(parse(text = form)))
这行得通;但是,您可以注意到我仍然必须指定variable1
和variable2
作为参数。我无法弄清楚如何在 fun 中自动提供图层名称作为参数。
我试过了:
overlay(env, fun = function(...) eval(parse(text = form)))
overlay(env, fun = function(names(env)) eval(parse(text = form)))
但这些显然不起作用。我已经eval(parse())
在函数中使用了糟糕的过程,我想找到一个不需要我编写eval(parse())
包含整个overlay
.
任何见解将不胜感激;)