在某种意义上=,它<-是等价的,但后者是首选,因为=它也被覆盖以指定默认参数(在哪里<-不起作用).
至于<<-,它比较棘手,不推荐.在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文档.