可能重复:
你如何在R中使用"<< - "(作用域分配)?
我正在读一个伪代码.我<<-多次遇到这个问题.有什么意义<<-?这是什么意思?在使用<<-运营商时我们需要考虑或注意什么?
从帮助文件?"<<-":
运算符<< - 和 - >>通常仅在函数中使用,并且通过父环境搜索要分配的变量的现有定义.如果找到这样的变量(并且其绑定未被锁定),则重新定义其值,否则在全局环境中进行赋值.请注意,它们的语义与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中有详细描述