2012-11-07 140 views
-5

可能重复:
How do you use “<<-” (scoping assignment) in R?<< - 在R中是什么意思?

我读一个伪代码。我多次遇到这个<<-<<-有什么意义?这是什么意思?当使用<<-运营商时,我们需要考虑什么或要小心?

+0

相关:[为什么使用'<< - '皱眉并且我该如何避免它?](http://stackoverflow.com/q/9851655/271616) –

+4

- 1在提问之前,您看过的文档是否有问题?预计你会努力帮助自己。 [so]并不意味着替换您正在使用的任何工具的文档。 –

回答

5

从帮助文件?"<<-"

运营商< < - 和 - >>通常只用在函数中,并 事业通过家长环境的变量的现有 定义作出的检索被分配。如果发现这样一个变量 (并且其绑定未锁定),则其值被重新定义,否则 赋值发生在全局环境中。注意它们的 语义不同于S语言的语义,但在 连同R的作用域规则中很有用。有关更多详细信息和示例,请参阅'The R Language Definition'手册。

下面是一个例子:

foo <- function(){ 
    a <<- 1 
} 

现在运行它,看看它是如何在全球环境中创建一个新对象a

a 
Error: object 'a' not found 

foo() 
a 
[1] 1 

的原因,一要尽量避免这种情况,它打破了功能性编程范例。在函数式编程中,人们只编写依赖于其输入而不产生副作用的函数。

<<-的副作用是在父环境中创建一个新对象,因此不再是函数式编程。

在大多数日常使用中,没有必要使用<<-,虽然它在使用具有状态的封闭时很有用,即记住他们过去做过的事情。这在Hadley's的精彩细节中有所描述devtools wiki