openlang

R 如何处理连续的算术符号

我不小心在 R 代码中多写了一个 +,却发现它完全没有报错。

继续试了几种情况后,我发现多个运算符连在一起时,R 的行为相当奇怪。

有人能解释原因,以及这些运算的先后顺序吗?


6 + 2
#> [1] 8

6 +++ 2
#> [1] 8

6 --- 2
#> [1] 4

6 +-+ 2
#> [1] 4

6 -+- 2
#> [1] 8
从英语翻译查看原文

后续讨论 2

顺着彼此的依据读下去
  1. 固定链接
    
    lobstr::ast(6 +++ 2)
    #█─`+` 
    #├─6 
    #└─█─`+` 
    #  └─█─`+` 
    #    └─2

    第一个之后的运算符都被视为一元运算符,用函数调用表示就相当于 +(6, +(+(2)))。

    从英语翻译查看原文
  2. 固定链接

    在 R 中,+/- 既能作为二元运算符,也能作为一元运算符,而且一元运算符的优先级更高。所以第一个符号才是真正的二元运算,其余符号是作用于右侧数字的嵌套一元 +/- 运算。一元 + 不改变数值,一元 - 每次都把符号反过来。

    所以 6 +++ 2 实际上是 6 + (+(+2)) = 8,而 6 --- 2 就是 6 - (-(-2)) = 4。其余两个序列也是一样,数一下第一个运算符之后有几个负号就行了(偶数为正,奇数为负)。

    从英语翻译查看原文

同一个问题的其他角度

  1. 怎样取得以秒计数的当前时间戳?

    在 Dyalog APL 中,函数 ⎕TS 可以给出当前的年、月、日、时、分、秒等,但能否取得从比如 1970-01-01 开始计数的秒数时间戳 (Unix 时间戳)?

    回复 2最近活动 apl
  2. Swift 把整数变成正数

    整数能转换成它的绝对值吗? 比如下面这样 我已经试过 UInt(),以为它会把 Int 转成无符号值,但没有成功。

    回复 4最近活动 swift
  3. 画相关性图时遇到问题

    大家好, 谁能解释一下为什么 Performance Analytics 包的 chart.Correlation 函数不能处理 iris 数据,我用 lapply 和 is.numeric 做了一份数值型的 iris 谢谢 Tavin

    回复 3最近活动 r