在环境中且仅在此处使用函数

Using functions inside environment and only here

我对 R 中的环境有一点疑问。 我在我的 globalEnv 中有一个环境(让我们称之为 my.env),我想定义一个只使用 my.env 中的变量的函数,所以我不必调用它们fun(my.env$foo) 但只是 fun(foo).

有办法吗?

您似乎想要non-standard评价。这通常涉及 substitute.

my.env <- new.env()
my.env$a <- 1:5
my.env$b <- 2

fun <- function(x, y, env = my.env) {
  x <- eval(substitute(x), envir = env)
  y <- eval(substitute(y), envir = env)
  x^y
}

fun(a, b)
#[1]  1  4  9 16 25

但请注意 eval 如何遵循搜索路径(get 也是如此):

rm(b, envir = my.env)
ls(my.env)
#[1] "a"
b <- 3

fun(a, b)
#[1]   1   8  27  64 125

my.env$b <- 4

fun(a, b)
#[1]   1  16  81 256 625

如果不能接受,您可以这样做:

fun1 <- function(x, y, env = my.env) {
  x <- env[[as.character(substitute(x))]]
  y <- env[[as.character(substitute(y))]]
  stopifnot(!is.null(x), !is.null(y))
  x^y
}

fun1(a, b)
#[1]   1  16  81 256 625
rm(b, envir = my.env)
fun1(a, b)
#Error: !is.null(y) is not TRUE