我们有
=
< -
<< -
有人可以解释他们到底做了什么吗?如果还有?当我使用<< - 时,它似乎弄乱了我的函数但是,但是我想在全局声明事物,所以当函数完成时我会使用它们(我不想从函数中返回它们因为我&# 39; m优化其他东西)
答案 0 :(得分:5)
在某种意义上,=
和<-
是等价的,但后者是首选,因为=
也会被覆盖以指定默认参数(其中<-
将不起作用)。
至于<<-
,它更棘手,不推荐。在R中,沿着任意代码执行的每个步骤都将与一堆环境相关联 - 当前环境,调用当前函数的环境等。运算符<<-
尝试将值分配给最近的在此环境层次结构中找到的对象,如果找不到,则在全局环境中分配它。例如,下面是一个基本的加法器。
f <- (function() { x <- 0; function(y) { x <<- x + y; x } })()
f(10) # 10
f(5) # 15
函数f
的环境具有x
的父环境。使用<<-
,我们可以访问x
,而如果我们有<-
,则每次结果都是y
,而不是跟踪总和。这样做的原因是<-
会在本地范围内创建x
的副本,并且它始终为0
,因为该值是从父环境复制的。
有关这些错综复杂的更多信息,您还可以查看相关的R documentation。