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

wol*_*oor 0 global r function object declare

我们有

=

< -

<< -

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

Rob*_*ski 5

在某种意义上=,它<-是等价的,但后者是首选,因为=它也被覆盖以指定默认参数(在哪里<-不起作用).

至于<<-,它比较棘手,不推荐.在R中,沿着任意代码执行的每个步骤都将与一堆环境相关联 - 当前环境,调用当前函数的环境等.运算符<<-尝试将值分配给在此环境中找到的最近对象层次结构,如果找不到,则在全局环境中分配它.例如,下面是一个基本的加法器.

f <- (function() { x <- 0; function(y) { x <<- x + y; x } })()
f(10) # 10
f(5)  # 15
Run Code Online (Sandbox Code Playgroud)

该函数f具有一个具有父环境的环境x.使用<<-,我们可以访问它x,而如果我们有<-,结果将是y每次,而不是跟踪总和.这样做的原因是,它<-x在本地范围内创建一个副本,并且它始终是0从父环境复制的值.

有关这些复杂性的更多信息,您还可以查看相关的R文档.