将可选参数传递给函数,三个点

R.M*_*.M. 3 arguments r ellipsis

我很困惑如何...工作.

tt = function(...) {
  return(x)
}
Run Code Online (Sandbox Code Playgroud)

为什么不tt(x = 2)回来2

相反,它失败并出现错误:

tt(x = 2)出错:找不到对象'x'

即使我x作为论点传递?

MrF*_*ick 6

因为你所经过的一切都...留在了....您传递的未通过参数显式捕获的变量不会扩展到本地环境中.本...应该用于当前的功能并不需要与所有的互动价值,但后来的一些功能确实需要使用?他们可以沿着内部很容易地通过....它适用于像这样的场景

ss <- function(x) {
   x
}

tt <- function(...) {
  return(ss(...))
}

tt(x=2)
Run Code Online (Sandbox Code Playgroud)

如果您的函数需要x定义变量,那么它应该是一个参数

tt <- function(x, ...) {
  return(x)
}
Run Code Online (Sandbox Code Playgroud)

如果你真的想将点扩展到当前环境中(我强烈建议你不要这样做),你可以做类似的事情

tt <- function(...) {
  list2env(list(...), environment())
  return(x)
}
Run Code Online (Sandbox Code Playgroud)