在R语言中,`=`和`<-`有什么区别?

128

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

2个回答

69

来自这里

<-操作符和=操作符将赋值到它们所在的环境中。 <-操作符可在任何地方使用,而=操作符仅允许在顶级(例如,在命令提示符下键入的完整表达式)或作为大括号表达式列表中的子表达式之一。


7
由于 <- 可以在任何地方使用,这是否意味着不需要使用 = - Mehper C. Palavuzlar
31
不,你在调用函数时仍需要使用=以避免全局赋值。看这些例子:http://www.mayin.org/ajayshah/KB/R/html/b1.html。如果你使用 name<-"paypal", x<-2, ...,它会在顶层设置x。尝试运行该示例,但将=替换为<-,并看看会发生什么。 - Mark Byers
5
至今文档仍然存在错误。在除操作符优先级外,“=” 不仅仅允许在顶层使用。默认情况下,“<-” 和 “=” 赋值运算符完全相同。R 通过为 = 赋予一个次要的语法意义使问题变得更加复杂,除了作为赋值运算符外还有其他用途。 - Konrad Rudolph

18

摘自 Robert 和 Casella 的《使用 R 引入 Monte Carlo 方法》:

“赋值运算符是 =,不要与布尔运算符相等的 == 混淆。旧的赋值运算符是 <-,由于兼容性原因,它仍然可以使用,但应该被忽略以确保代码更加清晰。 (正如 Spector, P. (2009). "R 数据操作" - 第8.7节所指出的,一个例外是当使用 system.time 时,因为 = 被用来识别关键字)

<- 这个赋值符号在布尔表达式中有一个误导特性:

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

这段代码原本用于测试x[1]是否小于-2, 但结果它却将2赋值给了x[1],覆盖了它原来的值。请注意,使用

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

错误地使用 (x[1]==-2) 代替会有相同的结果。


我也认为,无论出于何种原因需要进行全局赋值,只能使用基于“gets”的<<-运算符来执行,而没有基于“equals”的等效运算符。 - gd047
10
谷歌的 R 代码风格指南表示相反的意见:http://google-styleguide.googlecode.com/svn/trunk/google-r-style.html#assignment。 - Mark Byers
1
为了防止这种错误,方便起见,禁止使用if (x[1]=-2)。具体来说,只允许在顶层使用运算符= - Aaron left Stack Overflow
4
他问有什么不同,这是一个无答案的回复。 - aaa90210
1
阅读官方的R文档,我不确定这个说法是否正确:旧的赋值运算符是<-,出于兼容性的原因,它仍然保持可用。 - moo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接