我正在尝试解释有关R的演示文稿的作用域和调试。我正在阅读<<-
的帮助文件,并看到这样说:
运算符<>通常仅在函数中使用,并且
导致通过父环境进行现有的搜索
分配变量的定义。如果找到这样的变量
(并且其绑定未锁定),然后重新定义其值,否则
任务发生在全球环境中。
但是我认为这并不能完全描述<<-
的作用。这是一个函数:
do.func <- function() {
x <- 1
{
x<<-0
}
print(x)
}
do.func()
x
产生以下输出:
> do.func()
[1] 1
> x
[1] 0
看来
<<-
的工作直接针对全球环境。这样对吗? 最佳答案
这是使情况更加清楚的一种尝试。
该函数可以通过以下方式重写:
do.func <- function() {
`<-`(x, 1)
`{`(x <<- 0)
print(x)
}
这样弄清楚(仅函数调用)可以清楚地说明正在发生的事情。
{
块内的部分尤其由两个功能组成:`{` (`<<-`(x, 0) )
内的功能:
`<<-`(variable, value)
将值分配给变量并隐式返回。例如:
> ( `<<-`(x, 2) )
[1] 2
因此-在与x相同的环境中进行评估(在您的示例中)。因此,此块中发生了什么:
{
x<<-0
}
第一个x会被覆盖,只有在x的值传递给函数
{
后,该函数会简单地返回最后一个表达式。也可以看看:
help(`{`)