Hal*_*Ali 43 language-design r s
我知道如何使用<-
和->
,并且有有 几个 writeups上的区别equals
的分配和箭头分配,但是我不知道什么时候喜欢->
过<-
.
社区似乎已经联合使用<-
了作业.
谷歌R风格指南和Hadley Wickam的tidyverse R风格指南都没有->
在作业部分提及.
我很好奇设计考虑因素导致S/S-PLUS开发人员放入右箭头分配操作员->
.在什么样的设置(S)将使用->
被认为是更可读(或更容易输入)与<-
或=
?
我不熟悉允许右分配语义的任何其他语言.在这方面,哪些语言激发了R?
我正在寻找引用书籍/早期设计文档/用户手册/存档邮件列表或其他参考文献的答案,以确定S作者/设计者的意图是放入前向箭头赋值运算符.
Ben*_*ker 49
从答案到The New S Language(Becker,Chambers和Wilks 1988)的练习,通过Google Books:
当您输入一个长表达式时,最后要记住保存结果是一个好主意,右侧箭头允许您在不重新输入行的情况下执行赋值.
这表明S用户直接在控制台中工作,没有大多数现代REPL /交互式环境中可用的行编辑功能......
一些考古学:我在Google Books上找到了基础资源.有三本相关书籍:
蓝皮书:The New S Language Becker,Chambers和Wilks(Wadsworth和Brooks/Cole 1988,但2018年重新发行!!由CRC出版社出版)
->
在正文中没有提到:但它在附录中做了:
->
在正文中提到:我无法搜索这本书,所以->
也可能会在附录中提到.
我将带下划线的红色段落解释为支持在第一个带下划线的行中有一个拼写错误,->
而不是←...
这是上面提到的练习答案的屏幕截图:
如果你想要1985年书的副本,你可以花34.41美元 - 或1070.99美元(但免运费!)...
我认为这只是个人偏好的问题.
虽然->
早期的magrittr管道,最近的一个用例是->
可用于在这些管道中保持从左到右的流量:
library(magrittr)
input %>% fun1 %>% fun2 -> result
Run Code Online (Sandbox Code Playgroud)
另一方面,鉴于<-
大多数<-
情况下使用,即使在这种情况下也可能需要使用.
参数<-
是因为它使用设置的值开始关闭行,这有点像语句的目的,特别是如果结果变量命名良好,而右侧是机制,因此细节服从于结果 - 人们喜欢从概述开始,然后才进入细节.下面我们定义参数k
.它是3或它是否由常量定义,因为它在这里或复杂的表达式似乎是声明的目的附带的.
k <- 3
Run Code Online (Sandbox Code Playgroud)
就个人而言,我从不使用->
.
我不能推测R允许从左到右分配的原因.大多数编程语言(实际上几乎所有编程语言)只执行从右到左的任务,这当然是正确的.
也就是说,R并非完全独立.
我不熟悉允许右分配语义的任何其他语言.
我能想到至少有其他三种(系列)语言允许它:
汇编语言通常执行从左到右的分配; 例如,有影响力的AT&T语法写下这样的赋值:
movl $1, %eax
Run Code Online (Sandbox Code Playgroud)
这会将值分配1
给EAX寄存器.(另一方面,英特尔的x86语法执行从右到左的分配.)
TI-BASIC的STO("存储")操作如下所示:
1?A
Run Code Online (Sandbox Code Playgroud)COBOL使用多种形式的从左到右分配:
MOVE 1 TO x
ADD 2 TO x
Run Code Online (Sandbox Code Playgroud)
等等
然而,我怀疑这些语言中是否有任何一种作为R的赋值语法的灵感来源.相比之下,APL编程语言使用箭头分配,并且它通常接受的是S(从而间接R)采取的灵感来自那个 ; 但是APL只执行从右到左的赋值(var ? value
).