在R中声明对象的不同方式

时间:2014-03-30 18:04:23

标签: r function object global declare

我们有

=

< -

<< -

有人可以解释他们到底做了什么吗?如果还有?当我使用<< - 时,它似乎弄乱了我的函数但是,但是我想在全局声明事物,所以当函数完成时我会使用它们(我不想从函数中返回它们因为我&# 39; m优化其他东西)

1 个答案:

答案 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