关于data.frame定义中使用<-赋值的R语言机制问询
这问题挺有意思的,我来一步步拆解你遇到的现象背后的R语言逻辑:
1. 为什么不用=运算符也能识别?
在R的函数调用中,参数位置里的<-会先完成赋值操作,再把这个赋值表达式的结果作为参数传递给data.frame()。而且因为你没有显式给列命名(比如sc_start = rpois(...)这种写法),R会把整个赋值表达式的文本作为列名的原始来源,之后自动把非字母数字的字符(比如<、-、括号、逗号)替换成点,就得到了你看到的sc_start....rpois.n...15..0.4.这种列名。
简单说,data.frame(sc_start<-rpois(n=15, 0.4))等价于先执行sc_start <- rpois(n=15, 0.4),再把sc_start这个向量传给data.frame(),同时用表达式文本当列名。
2. <-赋值表达式是否返回值?
当然返回!这是R非常重要的特性——所有赋值运算符(包括<-和=)都会返回被赋值的值。比如你在控制台输入x <- 5,回车后会输出[1] 5,这就是赋值表达式的返回值。不像有些语言(比如Python)赋值语句是没有返回值的,R里赋值本身就是一个有返回结果的表达式。
3. 为什么未得到NULL?
正是因为上面说的赋值表达式返回的是被赋值的对象(也就是rpois(n=15, 0.4)生成的长度为15的整数向量),所以data.frame()接收到的是两个这样的向量,自然能创建出对应的data.frame,而不是NULL。如果赋值表达式返回NULL的话,那你的data.frame里才会出现NULL列,但显然这里不是这种情况。
内容的提问来源于stack exchange,提问作者storaged
相关产品推荐
相关产品推荐

