作为一门高级语言,R语言拥有独特的语法,比如今天说道的赋值符号。在其他语言里,赋值符合通常用一个等号(=)表示,而在R语言里,承担这个任务的可以是箭头(<-)符号,也可以是等号(=)。这就导致许多R语言初学者,分不清R语言中的赋值到底是使用箭头(<-)还是等号(=)?许多早期学习R的童鞋都比较喜欢使用等号(=)进行赋值。毕竟,简简单单的a = 5用起来比较符合大多数现有语言的习惯。出于对某种赋值方式的偏好,甚至出现了等号党和箭头党,但是到底孰好孰坏,显然争不出任何结果,相对来说更重要的是了解这两者的区别。只有我们深刻理解了其相同与不同之后,才能更好的运用他们。 R语言最开始设计的时候,是采用箭头(<-)作为赋值符号的,这是从APL语言继承而来的(箭头表示赋值,等号表示判断)。之后的S语言也沿用了这个用法,再之后R语言为了保持和S语言的兼容性保留了这个箭头。直到2001年,R的更新版本中 才加入了等号(=)赋值。因此,对于一般的赋值语句,箭头(<-)与 等号(=)在 功能上是没有区别的,可以通用。但是等号(=)的作用有两个:它既可以赋值,也可以传递函数参数(实际上传参可以看作一种特殊形式的赋值,给参数赋值)。通常情况下,如果等号(=)出现在单独的环境中,它就是赋值;如果写在函数的参数位置,它就是传参。如果你在设置参数的时候使用了箭头(<-),那么你会发现在全局变量里,会多出一个和参数名相同的赋值的变量,容易导致歧义和错误,而且占用命名空间。 下面,我们通过几个个例子来具体讲一下这两个函数的区别。
现在大家应该清楚了解箭头(<-)和等号(=)的区别了吧!个人建议,大家写赋值语句时采用箭头(<-),传参时使用等号(=)。这也是大部分老师都会强烈推荐的用法。是因为使用箭头(<-)赋值,意义清晰,可以保持代码良好的可读性,尤其是书写复杂函数时,避免造成混乱。Google 的 R style guide(https://google./styleguide/Rguide.xml)也推荐使用箭头(<-)赋值。 况且有些情况下,只能采用箭头(<-)赋值,例如:system.time(c<-1:10)中就不能使用等号(=)。而从数学的角度来说,等号两边是相等的,即等号左边的等于等号右边的,等号右边的也等于等号左边的。等号本身并没有指向性,因此并没有办法体现”赋值“这一含义。而在R中,箭头(<-)符号生动的阐释了赋值的含义,一个非等号(=)的赋值符从根本上向学习者暗示这样一个真理: 赋值操作与数学上的等于是完全不同的。此外,箭头(<-)符号可以双向赋值,即x <- 10与10 -> x等价。习惯 <- 和 -> 的使用以后,也对后来习惯使用更为复杂的 <<- 以及 ->> 这两个赋值符号(<<-或->>一般用于函数内部,表示给上一层环境中的变量赋值)做好铺垫,而 = 无法实现类似的功能。 另外也有等号党提出异议,认为采用箭头(<-)不如使用等号(=)。例如:如果我想判断一个变量是否小于10,可以写成 x<10;如果我想判断一个变量是否小于-10,然后顺手写成x<-10,这时候就会产生歧义。关于处理负数时产生歧义的说法,只能说是没有正确养成良好的空格习惯造成的,句号逗号后加空格,括号外围加空格,运算符号两边加空格,这些应该是学习代码前就应该懂得的常识。会犯出 a <- 5 和 a < -5 混淆的错误只能说明自己的代码风格糟糕,建议大家Google 的 R style guide(https://google./styleguide/Rguide.xml )中其他的一些代码写作规则。 Reference
|
|