-2

可能重复:
您如何在 R 中使用“<<-”(范围分配)?

我正在阅读伪代码。我遇到过<<-很多次。有什么意义<<-?这是什么意思?以及我们在使用<<-算子时需要考虑或注意什么?

4

1 回答 1

10

从帮助文件?"<<-"

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

这是一个例子:

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

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

a
Error: object 'a' not found

foo()
a
[1] 1

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

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

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

于 2012-11-07T15:40:53.983 回答