R语言中赋值运算符=与<-的输出差异问题
R语言中赋值运算符=与<-的输出差异问题
嘿,我来帮你捋清楚这个R里的小坑!你看你写的两段代码,同样是创建数据框,用=和<-的结果差这么多,其实是因为在data.frame()的参数里,这两个运算符的作用完全不一样。
先看正确的写法,用=来指定列名和对应的值:
# 用=定义数据框列,结果正常 Roster=data.frame( name=c('amit','jack','aman'), age=c(23,31,44), recived=c(TRUE,FALSE,FALSE) ) # 输出 Roster #> name age recived #> 1 amit 23 TRUE #> 2 jack 31 FALSE #> 3 aman 44 FALSE
这种写法里,name = c(...)是命名参数,明确告诉R:这个数据框有一列叫name,对应的值是后面的向量。所以输出的列名清晰,数据也按行对齐。
再看你用<-的写法,结果就乱了:
# 用<-在data.frame参数里赋值,结果异常 Roster=data.frame( name<-c('amit','jack','aman'), age<-c(23,31,44), recived<-c(TRUE,FALSE,FALSE) ) # 输出 Roster #> name....c..amit....jack....aman.. age....c.23..31..44. #> 1 amit 23 #> 2 jack 31 #> 3 aman 44 #> recived....c.TRUE..FALSE..FALSE. #> 1 TRUE #> 2 FALSE #> 3 FALSE
为啥会这样?因为name <- c(...)是一个赋值表达式——它先把向量赋值给了全局环境里的name变量,然后把这个表达式的结果(也就是那个向量本身)传给了data.frame。这时候R没收到明确的列名,就把整个赋值表达式转换成了一串奇怪的字符串当列名,导致输出格式完全混乱。
给你个小建议:创建数据框时,直接用=来定义列名和对应值最稳妥;如果习惯用<-,可以先在外面定义好变量,再传入data.frame,比如:
# 先定义变量,再创建数据框,结果正常 name <- c('amit','jack','aman') age <- c(23,31,44) recived <- c(TRUE,FALSE,FALSE) Roster <- data.frame(name, age, recived)
这样输出就和第一种写法一样整齐啦。
备注:内容来源于stack exchange,提问作者shreyash sahay
相关产品推荐
相关产品推荐

