我正在尝试编写一个在 R 中具有默认参数的函数。最后一个参数告诉我用户希望如何计算变量“g”。默认值为“s + a”(前两个参数的总和),但原则上它可以由任何函数指定(例如“s - a”或“s*a”...)。
myFunc <- function(n,
s = rbernoulli(n, p = 0.5),
a = rnorm(n,sd = 2),
g = s + a){
data.frame(s = factor(s),
a = a,
g = as.numeric(g>0))
}
如果我调用函数本身,这会很好地工作:
myFunc(5)
要指定我希望如何计算“g”,我想这样做:
myFunc(n = 5, g = a - s) (I)
或
myFunc(n = 5, a = ., s = ., g = a - s) (II)
似乎(我)会导致 R 在工作区中寻找变量 s/a,这不是我想要的。并且 (II) 不存在,但这是我所说的“为其使用默认计算”的方式。
我尝试用 NULL 指定我的函数,但这也不起作用。请注意,我希望在获得其值后能够在函数中使用“g”(例如,我不能用函数替换它)。
最佳答案
问题是 g
是在调用环境中计算的,而不是在 myFunc
内的环境中计算的。您可以添加一个参数来指定评估 g
的环境,并使用 environment()
的默认值,以便它默认为 myFunc2
中的环境>.
myFunc2 <- function(n,
s = rbernoulli(n, p = 0.5),
a = rnorm(n,sd = 2),
g,
envir = environment()) {
g <- if (missing(g)) s + a else eval(substitute(g), envir)
data.frame(s = factor(s),
a = a,
g = as.numeric(g>0))
}
myFunc2(n = 5, g = s + a)
关于r - 依赖于默认参数的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54755882/