R中`=`和`<-`之间有什么区别?

Meh*_*lar 103 r variable-assignment assignment-operator

可能重复:
R中的赋值运算符:'='和'< - '

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

Mar*_*ers 61

这里:

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

  • 不,你需要在调用函数时使用`=`以避免全局分配.请看这些例子:http://www.mayin.org/ajayshah/KB/R/html/b1.html.如果你使用`name < - "paypal",x <-2,...`它会在顶层设置`x`.尝试运行该示例,但编写`<-`而不是`=`,看看会发生什么. (27认同)
  • 由于`<-`可以在任何地方使用,这是否意味着不需要使用`=`? (5认同)
  • 该文档(至今仍然)是错误的。“=”*不*只允许在顶层。除了运算符优先级之外,默认情况下“&lt;-”和“=”赋值运算符完全相同。除了用作赋值运算符之外,R 还通过赋予 `=` 一个*次要*语法含义来使事情​​变得复杂。 (3认同)

Geo*_*tas 14

阅读罗伯特和卡塞拉的"用R引入蒙特卡罗方法":

"赋值运算符是=,不要混淆==,这是相等的布尔运算符.较旧的赋值运算符是,<-并且出于兼容性原因,它仍然保持功能,但应该忽略它以确保更清晰的编程.(正如指出的那样).作者:Spector,P.(2009).'数据操作与R' - 第8.7节.,例外是在使用时system.time,因为=然后用于识别关键字)

赋值运算符< - 的误导性特征可以在布尔表达式中找到,例如

> if (x[1]<-2) ...
Run Code Online (Sandbox Code Playgroud)

这应该测试x [1]是否小于-2但最终分配2到x [1],删除它的当前值!还要注意使用

> if (x[1]=-2) ...
Run Code Online (Sandbox Code Playgroud)

错误地而不是(x [1] == - 2)具有相同的结果."

  • 谷歌的R风格指南恰恰相反:http://google-styleguide.googlecode.com/svn/trunk/google-r-style.html#assignment (7认同)
  • 他问有什么区别.这是一个非答案. (3认同)
  • `if (x[1]=-2)` 被方便地禁止以防止这种错误。具体来说,运算符“=”仅允许在顶层使用。 (2认同)