SFu*_*n28 7 environment global r assign
为环境中的名称赋值和设置变量的环境有什么区别?我无法从文档中找到它.
例如:
MyTestFunc = function(x)
{
myVal = "abcde"
# what is this doing? why is myVal not in the global environment after
# this call? I see it adds an environment attribute to the variable,
# but what good is that?
environment(myVal) = globalenv()
assign( "myVal" , myVal , envir = globalenv() )
# this seems to copy graphics:::rect to the current environment which seems
# to contradict the behavior of environment( myVal ) above
environment( rect ) = environment()
# this seems to do the same thing
assign( "rect" , rect , envir = globalenv() )
}
# this prints out rect, but shows <environment: namespace: graphics>!
rect
Run Code Online (Sandbox Code Playgroud)
assign函数只是将名称绑定到指定环境中的值.
但环境替换功能做了两件事:它的主要目的是改变函数闭包的环境.该环境是函数的主体代码查找全局可变和函数的位置.通常,这个环境是定义函数的环境(所以如果你在提示符下定义它将使用globalenv).作为"奖励",它只为其他对象类型指定.Environment属性.这对于大多数对象好看不中用,但被使用的公式.
第二件事就是它几乎可以像任何其他替换函数一样工作:如果名称存在于当前环境中,它会直接修改它,否则它会创建一个本地副本并修改它.因此,在您的情况下,它会生成rect函数的本地副本并更改其环境.原始功能保持不变.
# showing names replacement behavior
f <- function() {
names(letters) <- LETTERS
letters # the local modified copy
}
f() # prints changed letters
letters # unchanged
Run Code Online (Sandbox Code Playgroud)