2014-04-04 23 views
0

我试图将一个环境传递给一个函数,但似乎无法使用``with''构造来使用它。 在下面的代码:与(数据,表达式)构造函数内部呈现其参数不可见?

f <- function(i,env)with(env, i+2*j) 

g <- function() { 
    env <- new.env() 
    env$j <- 3 
    f(10, env) 
} 

g() 

我本来期望的是里面的``有',我会是可见的,所以克()应该返回16.不过,我得到

Error in eval(expr, envir, enclos) : object 'i' not found 

我注意到实况说

如果“数据”已经是一个环境,那么,这是使用它的 现有父,

但这似乎完全短路一个函数的所有参数。 Wny是这个,为什么这是有用的行为?

(背景这是我在清理旧的代码,有一些较大的全局变量; 我想要的东西,成被传来传去一个大的环境,我的希望是, 我没不需要重写所有对以前全局变量的读/写操作)。

任何帮助表示赞赏。

回答

1

i处于f的环境中,但它不在env的环境中。你将不得不这样做

f <- function(i,env) with(env,j)*2+i 

g <- function() { 
    env <- new.env() 
    env$j <- 3 
    f(10, env) 
} 

g() 
+0

嗯......但我会认为这个对象我会在封闭的环境中查找。你的解决方案可以工作,但是和编写env $ i没有什么不同,这需要通过在env $前加上前缀来重写每个访问以前的全局对象。我希望会有一个窍门...... – plijnzaad