R语言“<-”和“=”的区别

R语言中“<-”用于赋值,“=”用于传参。

1.构建矩阵:

#ncol用“=”时,指定矩阵为3列
>matrix(c(1:12),ncol=3) 
      [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12
#ncol用“<-”时,指定ncol为3,但实际是nrow=ncol<-3,因为该位置默认是参数nrow
>matrix(c(1:12),ncol<-3)
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

我们可以看到,尽管两种方法,都运行成功,且得到了一个矩阵,但是第二个结果是一个错误的结果,此处出错的原因就是,ncol<-3是将3赋值给变量ncol,然后再传递给函数对应位置的参数,而在函数内第二个参数实际上是对应的nrow参数。在实际编写代码时,遇到这种情况,如果我们不注意,就会导致后续所有结果都出错。

2.此外,还需要注意的一点就是,在传参中采用箭头(<-)进行赋值的变量只有在需要使用时才会改变其值。例如:

> a <- 1 
> f <- function(x) return(TRUE)
> f(a <- a + 1)
[1] TRUE
> a
[1] 1

请注意,以上范例里, a 的值并没有改变,也就是a并没有加1,还是原来的a值,这是在函数内部并未用到参数a。这会导致程序里出现一些不可预期的结果并且降低代码可读性,所以不推荐在函数参数里使用箭头(<-)这种赋值方式。在看下面的例子:

 > a <- 1 
> f <- function(x) { if(runif(1)>0.5) {TRUE} else {print(x)}} 
> f(a <- a+1)
[1] TRUE 
> a
[1] 1 
> f(a <- a+1)
[1] TRUE
> f(a <- a+1)
[1] 2
> a  
[1] 2

上述代码中,向函数 f() 传递传递参数 a <- a + 1 后,只有在随机数 runif(1) 小于0.5的时候,a 的值才会改变,即执行+1操作,然后打印a。否则传递TRUE值。因此,因为随机数 runif(1) 的随机性,每次调用函数 f()后 a 的值是不确定的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,679评论 0 5
  • 函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。 上面代码检查函数l...
    呼呼哥阅读 3,519评论 0 1
  • 了解两者的区别R最开始设计的时候是以<-作为赋值符号的,这是从APL语言继承而来的(箭头表示赋值,等号表示判断)。...
    生信小菜鸟阅读 1,952评论 0 1
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,894评论 2 9
  • 特别说明,为便于查阅,文章转自https://github.com/getify/You-Dont-Know-JS...
    杀破狼real阅读 588评论 0 0