作为一门高级语言 , R语言拥有独特的语法 , 比如今天说道的赋值符号 。在其他语言里 , 赋值符合通常用一个等号(=)表示 , 而在R语言里 , 承担这个任务的可以是箭头(<-)符号 , 也可以是等号(=) 。这就导致许多R语言初学者 , 分不清R语言中的赋值到底是使用箭头(<-)还是等号(=)?许多早期学习R的童鞋都比较喜欢使用等号(=)进行赋值 。毕竟 , 简简单单的a = 5用起来比较符合大多数现有语言的习惯 。出于对某种赋值方式的偏好 , 甚至出现了等号党和箭头党 , 但是到底孰好孰坏 , 显然争不出任何结果 , 相对来说更重要的是了解这两者的区别 。只有我们深刻理解了其相同与不同之后 , 才能更好的运用他们 。
R语言最开始设计的时候 , 是采用箭头(<-)作为赋值符号的 , 这是从APL语言继承而来的(箭头表示赋值 , 等号表示判断) 。之后的S语言也沿用了这个用法 , 再之后R语言为了保持和S语言的兼容性保留了这个箭头 。直到2001年 , R的更新版本中 才加入了等号(=)赋值 。因此 , 对于一般的赋值语句 , 箭头(<-)与 等号(=)在 功能上是没有区别的 , 可以通用 。但是等号(=)的作用有两个:它既可以赋值 , 也可以传递函数参数(实际上传参可以看作一种特殊形式的赋值 , 给参数赋值) 。通常情况下 , 如果等号(=)出现在单独的环境中 , 它就是赋值;如果写在函数的参数位置 , 它就是传参 。如果你在设置参数的时候使用了箭头(<-) , 那么你会发现在全局变量里 , 会多出一个和参数名相同的赋值的变量 , 容易导致歧义和错误 , 而且占用命名空间 。
下面 , 我们通过几个个例子来具体讲一下这两个函数的区别 。
- 箭头(<-)和等号(=)赋值在作用域上的不同 。
箭头(<-)创建的变量的作用范围为整个全局环境(Global environment) , 而等号(=)通常在一个局部环境(Local environment) 。例如: - > rm(x) ## 如果变量 x 存在的话 , 先删除此变量 > mean(x = 1:10) [1] 5.5 > x Error: object \'x\' not found
- 在以上范例里 , 变量 x 是在函数的作用域里进行声明的 , 所以它只存在于此函数中 , 一旦运算完成便“消失” 。
- > mean(x <- 1:10) [1] 5.5 > x [1] 1 2 3 4 5 6 7 8 9 10
- 而采用箭头(<-)赋值 , x 变量则出现在了Global Environment 里 , 并且我们可以调用它 。在此例中 , 实际上是先构建了x变量 , 再将x传递给mean函数的第一个参数 , 我们看到 , 采用这种方式 , 程序也正确运行了 , 但是采用箭头(<-)赋值的方式去传参时要非常小心 。可以看下面例子中引起错误地情况 。
- 箭头(<-)和等号(=)在参数传递时的区别
- > x <- rnorm(100) # 采用箭头(<-)进行变量赋值 > y <- 2*x + rnorm(100) # 采用箭头(<-)进行变量赋值 > lm(formula=y~x) #上面的代码完全等价于下面的代码 > x = rnorm(100) # 采用等号(=)进行变量赋值 > y = 2*x + rnorm(100) # 采用等号(=)进行变量赋值 > lm(formula=y~x)
- 两段代码中前两行都是赋值语句 , 分别为x变量和y变量赋值 , 此时等号(=)与箭头(
- 双11晚会首位演出嘉宾出炉!水果姐来了
- 双十一震撼来袭 双十一即将来袭
- 2015支付宝双12数据统计
- 人有双重性格正常吗 双重性格的人是什么意思
- 亚马逊入驻天猫国际给双方带来的好处 亚马逊入驻天猫
- 水蛭2020价格 水蛭的价格?
- 双子座真的如传言所说的花心吗
- 电商巨头们双11野心曝光
- 双子座专属网名霸气 双子座的霸气英文网名
- 笔记本电脑15寸 15寸笔记本推荐哪款
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
