“=”和“<”之间有什么区别?
  赋值运算符=和<-在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?
