什么<< - 在R中意味着什么?

时间:2012-11-07 15:39:05

标签: r

  

可能重复:
  How do you use “<<-” (scoping assignment) in R?

我正在读一个伪代码。我多次遇到这个<<-<<-有什么意义?这是什么意思?在使用<<-运算符时,我们需要考虑或注意什么?

1 个答案:

答案 0 :(得分:9)

来自帮助文件?"<<-"

  

运营商&lt;&lt; - & - &gt;&gt;通常只用于函数,和   导致搜索通过父环境进行搜索   被分配的变量的定义。如果找到这样的变量   (并且它的绑定没有被锁定)然后重新定义它的值,否则   任务发生在全球环境中。注意他们的   语义与S语言不同,但在语言中很有用   与R的范围规则相结合。参见'The R Language   定义'手册以获取更多详细信息和示例。

以下是一个例子:

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

现在运行它,看看它如何在全局环境中创建新对象a

a
Error: object 'a' not found

foo()
a
[1] 1

人们应该试图避免这种情况的原因是它打破了函数式编程范式。在函数式编程中,人们编写的函数仅依赖于它们的输入而不会产生副作用。

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

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

中有详细描述