全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
8881 4
2016-08-04
悬赏 5 个论坛币 已解决
小白请教一个问题。
我现在有一个data.frame名字暂定为school,包含v1,v2,v3...v100,一共100个变量。现在我想选择v1-v4和v20这5个变量。

操作一:newdata <- school[c(v1,v2,v3,v4,v20)]
操作二:
newdata <- school[c(“v1”,"v2","v3","v4","v20")]
结果显示,第一种方法是错的,生成了几百个变量,第二种方式是对的。

然后我看到还有一个方法:
newdata <-subset(school,select=c(v1,v2,v3,v4,v20))
结果显示也是对的。

问题在于,前面一种方法中,c()里面的变量需要加括号,第二种为什么就不需要加了呢?求解答。


最佳答案

cheetahfly 查看完整内容

这里涉及到R语言中的Non-standard evaluation的技术,比较复杂了,你就记住,在某些函数中,V1和“V1”都行得通。比如: subset(school, select=c(v1,v2,v3,v4,v20)) 和 subset(school, select=c(“v1”,"v2","v3","v4","v20"))都能行得通; library(MASS) 和library("MASS")都能行得通。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-8-4 16:04:40
这里涉及到R语言中的Non-standard evaluation的技术,比较复杂了,你就记住,在某些函数中,V1和“V1”都行得通。比如:
subset(school, select=c(v1,v2,v3,v4,v20))  和 subset(school, select=c(“v1”,"v2","v3","v4","v20"))都能行得通;
library(MASS) 和library("MASS")都能行得通。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-8-4 20:43:31
cheetahfly 发表于 2016-8-4 18:04
这里涉及到R语言中的Non-standard evaluation的技术,比较复杂了,你就记住,在某些函数中,V1和“V1”都行 ...
感谢,那对于除此之外的函数,变量名最好是加上双引号吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-8-4 21:57:58
不加引号就是种语法糖吧。
比如library函数,通过如下语句将不加引号的包名转换为字符串:
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-8-4 22:00:23
bens220 发表于 2016-8-4 20:43
感谢,那对于除此之外的函数,变量名最好是加上双引号吗?
尽管没有找到技术权威对这个问题的回答,但我想应该是的。尤其如果在某个environment中恰好有名字叫V1的变量,那可能会带来不可预知的执行结果。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群