【问题标题】:What's the difference between `=` and `<-` in R? [duplicate]R中的`=`和`<-`有什么区别? [复制]
【发布时间】:2011-01-17 07:30:40
【问题描述】:

我使用的是 R 2.8.1,可以同时使用 =&lt;- 作为变量赋值运算符。他们之间有什么区别?我应该使用哪一个?

【问题讨论】:

    标签: r assignment-operator variable-assignment


    【解决方案1】:

    来自here

    运算符

    【讨论】:

    • 既然&lt;-可以在任何地方使用,是不是就不用=了?
    • 不行,调用函数时还是需要使用=,避免全局赋值。看看这些例子:mayin.org/ajayshah/KB/R/html/b1.html。如果您使用name&lt;-"paypal", x&lt;-2, ...,它将在顶层设置x。尝试运行该示例,但编写 &lt;- 而不是 =,看看会发生什么。
    • 文档(直到今天仍然)是错误的。 =只允许在顶层使用。除了运算符优先级,&lt;-= 赋值运算符默认情况下完全相同。 R 赋予= 一个次要 句法含义,除了用作赋值运算符之外,使事情复杂化。
    【解决方案2】:

    阅读 Robert 和 Casella 的“用 R 介绍蒙特卡洛方法”:

    “赋值运算符是=,不要与==混淆,后者是布尔运算符,表示相等。旧的赋值运算符是&lt;-,出于兼容性原因,它仍然可以使用,但它应该忽略以确保更清洁的编程。 (正如 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)&lt;&lt;-操作符来执行,并且没有“基于equals"的等价物。
    • Google 的 R 风格指南正好相反:google-styleguide.googlecode.com/svn/trunk/…
    • if (x[1]=-2) 被方便地禁止以防止此类错误。具体来说,运算符= 只允许在顶层使用。
    • 他问有什么不同。这是没有答案的。
    猜你喜欢
    • 2021-10-21
    • 1970-01-01
    • 2013-04-08
    • 2013-03-04
    • 1970-01-01
    • 2015-01-19
    • 2015-11-23
    • 2013-02-13
    相关资源
    最近更新 更多