R 如何使用父环境中指定的某些参数调用函数?
考虑全局环境中定义的以下功能:R 如何使用父环境中指定的某些参数调用函数?,r,eval,R,Eval,考虑全局环境中定义的以下功能: test <- function(x,y) { x+y } 这是因为函数在列表(y=2)中找不到y。是否有一种简单的方法可以修改我评估它的方式,以便test(1)在定义了y的环境中工作?eval\u with我认为最安全的方法是在未提供的情况下从父帧定义y的默认值 eval_with <- function(fn, ..., stuff = parent.frame()) { args <- list(...) for (arg
test <- function(x,y) {
x+y
}
这是因为函数在
列表(y=2)
中找不到y
。是否有一种简单的方法可以修改我评估它的方式,以便test(1)
在定义了y
的环境中工作?eval\u with我认为最安全的方法是在未提供的情况下从父帧定义y
的默认值
eval_with <- function(fn, ..., stuff = parent.frame()) {
args <- list(...)
for (arg in setdiff(intersect(ls(stuff), names(formals(fn))), names(args)))
args[[arg]] <- stuff[[arg]]
do.call(fn, args)
}
test<-function(x,y=get("y", envir=parent.frame(1))) {
x+y
}
y<-3
test(1)
# [1] 4
test(1, 10)
# [1] 11
test可能是这样的吗
在下面的test()
中,如果参数列表中缺少y
,函数将在全局环境中查找它,如果找到,则计算x+y
,否则,它将接受给定的y
参数并在计算中使用该参数
> y <- 5
> test <- function(x, y) {
if(missing(y)) y <- get("y", .GlobalEnv)
x + y
}
> test(1) ## 1 + 5
# [1] 6
> test(1, 3) ## 1 + 3
# [1] 4
>y测试测试(1,3)##1+3
# [1] 4
您的意思是要从测试定义中删除y
<代码>测试为什么您指出y
是函数的一个参数?如果一个值作为y
传递,您如何知道使用哪一个?函数定义仍然是test您是否可以定义一个新函数testx@flodel-有趣。为了向将来的读者澄清,如果函数使用了一个未指定为输入参数的对象,R会在调用(全局?)环境中查找它吗?因此,您可以通过执行:test间接地传递y
参数。test同意这是一个糟糕的想法。
test<-function(x,y=get("y", envir=parent.frame(1))) {
x+y
}
y<-3
test(1)
# [1] 4
test(1, 10)
# [1] 11
> y <- 5
> test <- function(x, y) {
if(missing(y)) y <- get("y", .GlobalEnv)
x + y
}
> test(1) ## 1 + 5
# [1] 6
> test(1, 3) ## 1 + 3
# [1] 4