【发布时间】:2018-04-26 01:49:58
【问题描述】:
为什么在函数内部没有提供但需要b时没有报告错误?谢谢!
f2 <- function(a,b) {a[b]}; f2(a=rep(1, 2))
我明白这个函数没有错误:
f <- function(x) {
10
}
f(stop("This is an error!"))
由于懒惰的评估 但是这个
f <- function(x) {
force(x)
10
}
f(stop("This is an error!"))
或者这个
f <- function(x) {
x
10
}
f(stop("This is an error!"))
会产生错误。因为在这两种情况下 x 在函数中使用。以上两个例子均来自http://adv-r.had.co.nz/Functions.html。既然 b 也在 f2 中使用,是否有必要在 f2 中加力?谢谢!
【问题讨论】:
-
更简单的版本,同样的问题 -
f2 <- function(a,b) {a[b]}; f2(a=1) -
我猜这是我不完全理解的一些懒惰的评估怪癖,因为如果你
debug(f2)你可以看到b是从函数环境中的ls()返回的。一旦?force与 'argument "b" is missing" 错误一起使用,f2 <- function(a,b) {a[force(b)]}; f2(a=1:2)也会失败。来源:stackoverflow.com/questions/29733257/… -
但我认为在上面的链接中,原来的函数 f 没有使用。 stackoverflow.com/questions/29733257/…
标签: r function arguments parameter-passing