R 中的“=”和“<-”有什么区别?[复制]

What's the difference between `=` and `<-` in R? [duplicate]

提问人:Mehper C. Palavuzlar 提问时间:2/16/2010 最后编辑:Konrad RudolphMehper C. Palavuzlar 更新时间:1/24/2020 访问量:116799

问:

我正在使用 R 2.8.1,可以同时使用和作为变量赋值运算符。它们之间有什么区别?我应该使用哪一个?=<-

r 运算符 变量赋值

评论


答:

69赞 Mark Byers 2/16/2010 #1

这里

运算符 <- 和 = 分配到评估它们的环境中。运算符 <- 可以在任何地方使用,而运算符 = 只允许在顶层使用(例如,在命令提示符下键入的完整表达式中)或作为括号表达式列表中的子表达式之一。

评论

7赞 Mehper C. Palavuzlar 2/16/2010
既然可以在任何地方使用,这是否意味着没有必要使用?<-=
31赞 Mark Byers 2/16/2010
不可以,调用函数时仍需要使用,以避免全局分配。请看这些例子: mayin.org/ajayshah/KB/R/html/b1.html。如果您使用它,它将设置在顶层。尝试运行该示例,但不要写,看看会发生什么。=name<-"paypal", x<-2, ...x<-=
5赞 Konrad Rudolph 2/13/2020
文档(直到今天仍然)是错误的。 不仅在顶层允许。默认情况下,除运算符优先级外,和 赋值运算符完全相同。R 除了用作赋值运算符外,还通过提供次要句法含义使问题复杂化。=<-==
18赞 gd047 2/16/2010 #2

阅读 Robert 和 Casella 的“使用 R 引入蒙特卡罗方法”:

“赋值运算符是 ,不要与 混淆,后者是相等的布尔运算符。较旧的赋值运算符是,出于兼容性原因,它仍然有效,但应忽略它以确保更干净的编程。 (正如Spector,P.(2009)所指出的。'Data Manipulation with R' - 第 8.7 节,例外情况是使用 ,因为 = 用于标识关键字)===<-system.time

赋值运算符 <- 的一个误导性特征是在布尔值中发现的 表达式,例如

> if (x[1]<-2) ...

它应该测试 x[1] 是否小于 -2 但结束 向上分配 2 到 x[1],擦除其当前值!另请注意,使用

> if (x[1]=-2) ...

错误地而不是 (x[1]==-2) 会产生同样的后果。

评论

0赞 gd047 2/16/2010
我还认为,无论需要做这样的事情,都只能使用(基于“gets”的)运算符来执行,并且没有基于“equals”的等价物。global assignment<<-
10赞 Mark Byers 8/8/2010
谷歌的 R 风格指南恰恰相反:google-styleguide.googlecode.com/svn/trunk/......
1赞 Aaron left Stack Overflow 3/14/2011
if (x[1]=-2)方便地禁止以防止此类错误。具体来说,运算符只允许在顶层使用。=
4赞 aaa90210 12/2/2014
他问有什么区别。这是一个非答案。
1赞 moo 4/15/2022
阅读官方 R 文档,我不确定这种说法是否正确:较旧的赋值运算符是 < - 并且,出于兼容性原因,它仍然有效,