问题

R中的赋值运算符"="和"< - - "有什么区别?我知道运算符稍有不同,因为此示例显示

x <- y <- 5
x = y = 5
x = y <- 5
x <- y = 5
# Error in (x <- y) = 5 : could not find function "<-<-"

但这是唯一的区别吗?



解决方法

指定作业运算子的差异更清楚,您可以使用它们在函数调用中设置参数值.例如:

median(x = 1:10)
x   
## Error: object 'x' not found

在这种情况下, x 在函数的作用域内声明,因此在用户工作空间中不存在.

median(x <- 1:10)
x    
## [1]  1  2  3  4  5  6  7  8  9 10

在这种情况下,在用户工作区中声明 x ,因此您可以在函数调用完成后使用它.


在R社群中,为了与S-Plus的(非常)旧版本的兼容性,使用'< - '来分配(除了在函数签名之外)请注意,空格有助于澄清

等情况
x<-3
# Does this mean assignment?
x <- 3
# Or less than?
x < -3

大多数R IDE都有键盘快捷键,可使'< - '更容易键入.在RStudio中, Ctrl + = kbd> - (下划线)in emacs + ESS.


如果您喜欢将 = 写入&lt; - ,但希望使用更常用的赋值符号作为公开发布的代码(例如CRAN)请使用 tidy _ * 函数在 formatR 包中自动替换 = < - .

library(formatR)
tidy_source(text = "x = 1:5", arrow = TRUE)
## x <- 1:5

问题的答案"为什么 x <-y = 5 抛出错误,但不是 x <-y < - 5 ?是"它归结于解析器中包含的魔法". R的语法包含许多不明确的情况必须以一种或另一种方式解决.解析器根据是否使用 = < - 来选择以不同的顺序解析表达式的位.

要了解发生了什么,您需要知道分配静默返回分配的值.您可以通过显式打印,例如 print(x < - 2 + 3)更清楚地看到.

其次,如果我们使用赋值的前缀符号,它更清楚.所以

x <- 5
`<-`(x, 5)  #same thing

y = 5
`=`(y, 5)   #also the same thing

解析器将 x <-y < - 5 解释为

`<-`(x, `<-`(y, 5))

我们可能希望 x <-y = 5 会是

`<-`(x, `=`(y, 5))

但实际上它被解释为

`=`(`<-`(x, y), 5)

我不知道为什么会发生这种情况,因为 = 的优先级高于&lt; - .也许在解析器中的一个错误,但好运试图得到改变现在.

文档错误. = 实际上优先级低于&lt; - ,这就是为什么订单意外不同.

?语法 帮助页现在正确显示 = 的优先级低于&lt; - .




相关问题推荐