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

use*_*197 -2 r

可能重复:
你如何在R中使用"<< - "(作用域分配)?

我正在读一个伪代码.我<<-多次遇到这个问题.有什么意义<<-?这是什么意思?在使用<<-运营商时我们需要考虑或注意什么?

And*_*rie 9

从帮助文件?"<<-":

运算符<< - 和 - >>通常仅在函数中使用,并且通过父环境搜索要分配的变量的现有定义.如果找到这样的变量(并且其绑定未被锁定),则重新定义其值,否则在全局环境中进行赋值.请注意,它们的语义与S语言中的语义不同,但与R的范围规则结合使用时,请参阅"R语言定义"手册以获取更多详细信息和示例.

这是一个例子:

foo <- function(){
  a <<- 1
}
Run Code Online (Sandbox Code Playgroud)

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

a
Error: object 'a' not found

foo()
a
[1] 1
Run Code Online (Sandbox Code Playgroud)

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

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

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