【发布时间】:2021-01-17 05:09:41
【问题描述】:
我在函数myFunction() 中使用rpart()。 rpart() 接受几个使用missing() 函数处理的参数:
rpart(formula, data, weights, subset, na.action = na.rpart, method, model = FALSE, x = FALSE, y = TRUE, parms, control, cost, ...)
例如,参数method 可以不指定,并使用以下代码在rpart() 内部处理:
if (missing(method)) method <- "whatever default"
如何以最简单有效的方式将参数method 作为myFunction() 的参数传递,以便它处理默认的缺失参数?
如果我做类似的事情
myFunction(foo = 0, method){# somecode; rpart(y ~ x, data = data, method = method)}
那么这会引发错误,
缺少参数“方法”,没有默认值
我也尝试过使用rlang::missing() 之类的功能,但没有任何成功。
当然,一个选项是做一些事情,比如传递myFunction(method = NULL),然后使用 if-else 语句来传递或不传递这个参数,但是我必须对每种可能性进行编码(对于 4 个参数,即 16 个调用)和很笨拙。
请注意,我还想避免使用省略号,因为我想专门命名我的论点。
最小的可重复示例:
y <- c(0,0.1,0.1,-0.1, 100, 101, 99)
x <- c(1,2,3,4, 100,101,102)
myFunction <- function(x, y,
method,
weights,
subset,
parms){
rpart(formula = y ~ .,
data = data.frame(y, x),
weights = weights,
subset = subset,
parms = parms)
}
myFunction(x,y)
eval(extras, data, env) 中的错误:缺少参数“权重”, 没有默认值
【问题讨论】:
-
我试过这个例子
f <- function(x){if (missing(x)) x <- "default";x};g <- function(x){f(x = x)},但我没有错误。 -
@MrFlick 我已经更新了错误消息。如果我指定一个参数,我可以传递一个参数,但我希望能够保留默认(缺失)参数。 IE。未在
myFunction()中指定method应该与未在rpart()中指定它一样工作 -
我认为您在描述
...的用途。myFunction(foo = 0, ...) {# somecode; rpart(y ~ x, data = data, ...)}? -
好吧,这里的错误消息谈到了“权重”,但您的示例中似乎没有使用。缺少的参数通常会正确传递,例如
f1 <- function(x) {print(missing(x))}; f2 <- function(x) {f1(x)}; f2()。那里没有错误。所以目前还不清楚你在做什么会导致错误。一个可重现的例子是我们可以复制/粘贴到 R 中运行和测试。 -
@MrFlick 权重的东西在粘贴到这里时是一个错字。
标签: r