【发布时间】:2017-07-25 21:58:41
【问题描述】:
我已阅读与“承诺已在评估中”警告相关的问题的其他答案,但我无法了解它们如何帮助我避免此问题。
这里我有一个函数,对于一个方法,它采用一个默认参数值,该值是另一个值的函数。
myfun <- function(x, ones = NULL) {
UseMethod("myfun")
}
myfun.list <- function(x, ones = NA) {
data.frame(x = x[[1]], ones)
}
ones <- function(x) {
rep(1, length(x))
}
到目前为止,一切都很好:
myfun(list(letters[1:5]))
## x ones
## 1 a NA
## 2 b NA
## 3 c NA
## 4 d NA
## 5 e NA
但是当我定义另一个将ones 参数的默认值设置为函数ones(x) 的方法时,我得到一个错误:
myfun.character <- function(x, ones = ones(x)) {
myfun(as.list(x), ones)
}
myfun(letters[1:5])
## Error in data.frame(x = x[[1]], ones) :
## promise already under evaluation: recursive default argument reference or earlier problems?
由于各种原因,我需要保持参数名称与函数名称相同(对于ones)。 如何强制评估 my fun.character 中的参数?我还需要它来工作(它确实如此):
myfun(letters[1:5], 1:5)
## x ones
## 1 a 1
## 2 a 2
## 3 a 3
## 4 a 4
## 5 a 5
谢谢!
【问题讨论】:
标签: r parameter-passing lazy-evaluation