【发布时间】:2011-01-17 07:30:40
【问题描述】:
我使用的是 R 2.8.1,可以同时使用 = 和 <- 作为变量赋值运算符。他们之间有什么区别?我应该使用哪一个?
【问题讨论】:
标签: r assignment-operator variable-assignment
我使用的是 R 2.8.1,可以同时使用 = 和 <- 作为变量赋值运算符。他们之间有什么区别?我应该使用哪一个?
【问题讨论】:
标签: r assignment-operator variable-assignment
来自here:
运算符
【讨论】:
<-可以在任何地方使用,是不是就不用=了?
=,避免全局赋值。看看这些例子:mayin.org/ajayshah/KB/R/html/b1.html。如果您使用name<-"paypal", x<-2, ...,它将在顶层设置x。尝试运行该示例,但编写 <- 而不是 =,看看会发生什么。
=不只允许在顶层使用。除了运算符优先级,<- 和= 赋值运算符默认情况下完全相同。 R 赋予= 一个次要 句法含义,除了用作赋值运算符之外,使事情复杂化。
阅读 Robert 和 Casella 的“用 R 介绍蒙特卡洛方法”:
“赋值运算符是=,不要与==混淆,后者是布尔运算符,表示相等。旧的赋值运算符是<-,出于兼容性原因,它仍然可以使用,但它应该忽略以确保更清洁的编程。
(正如 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) 具有相同的结果。”
【讨论】:
global assignment,无论需要做这样的事情,只能使用(“gets”-based)<<-操作符来执行,并且没有“基于equals"的等价物。
if (x[1]=-2) 被方便地禁止以防止此类错误。具体来说,运算符= 只允许在顶层使用。