“=”和“<”之间有什么区别?
赋值运算符=
和<-
在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都有键盘快捷键来使<-
更易于输入。 在emacs + ESS中,Ctrl + =在Architect中,Alt + - 在RStudio中(Option + - 在macOS下),Shift + - (下划线)。
如果您更愿意将=
写入<-
但希望对公开发布的代码(例如,在CRAN上)使用更常见的赋值符号,则可以使用tidy_*
formatR
程序包中的formatR
tidy_*
函数自动将<-
=
替换=
<-
。
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)
这是因为=
的优先级低于<-
,如在?Syntax
帮助页面上所示。
Google的R风格指南通过禁止分配“=”来简化问题。 不错的选择。
https://google.github.io/styleguide/Rguide.xml
R手册详细介绍了所有5个赋值操作符。
http://stat.ethz.ch/R-manual/R-patched/library/base/html/assignOps.html
根据约翰钱伯斯,运营商=
只允许在“顶层”,这意味着它是不允许在控制结构, if
,使以下编程错误非法。
> if(x = 0) 1 else x
Error: syntax error
正如他所写的,“禁止在控制表达式中使用新的赋值形式[=]可以避免编程错误(例如上面的例子),对于相同的运算符而言,可能比其他S赋值更可能发生。”
如果它“与周围的逻辑结构,大括号或一对额外的括号隔离开来”,那么可以设法做到这一点,所以if ((x = 0)) 1 else x
将起作用。
请参阅http://developer.r-project.org/equalAssign.html
链接地址: http://www.djcxy.com/p/2029.html上一篇: What are the differences between "=" and "<
下一篇: Access restriction on class due to restriction on required library rt.jar?