R 从父环境调用缺少的参数

R 从父环境调用缺少的参数,r,R,在没有提供参数的情况下,我找不到一种聪明的方法从父环境中恢复丢失的参数(或重新构建它) 如果使用缺失 fooBar <- function(x,y){ if(missing(y)) { y = get0("y", inherits = TRUE) x + y } else { x + y } } y <- 1 fooBar(x = 2) fooBar我找到了这个解决方案,但我对此感到不安 fooBar <- function(x,y=NUL

在没有提供参数的情况下,我找不到一种聪明的方法从父环境中恢复丢失的参数(或重新构建它)

如果使用
缺失

fooBar <- function(x,y){
  if(missing(y)) {
    y = get0("y", inherits = TRUE)
    x + y
  } else {
    x + y
  }
}
y <- 1
fooBar(x = 2)

fooBar我找到了这个解决方案,但我对此感到不安

fooBar <- function(x,y=NULL){
  if(is.null(y)) {
    rm(y)  # otherwise, get0 recovers NULL :S
    y = get0("y", inherits = TRUE)
    x + y
  } else {
    x + y
  }
}
y <- 1
fooBar(x = 2)
fooBar也许是这个

fooBar <- function(x,y){
  if(missing(y)) y <- eval.parent(quote(y))
  x + y
}
y <- 1
fooBar(x = 2)
# [1] 3

fooBar为什么令人不安?R默认情况下会遍历父环境进行搜索,因此您可以将此函数简化为
fooBar