楼主: bens220
8928 4

[问答] 请教R语言中变量选择的问题 [推广有奖]

  • 2关注
  • 0粉丝

已卖:434份资源

硕士生

88%

还不是VIP/贵宾

-

威望
0
论坛币
134 个
通用积分
55.4647
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1054 点
帖子
80
精华
0
在线时间
229 小时
注册时间
2012-11-10
最后登录
2024-2-19

楼主
bens220 在职认证  发表于 2016-8-4 16:04:39 |AI写论文
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")都能行得通。
关键词:变量选择 R语言 school Frame Data R语言 变量选择

沙发
cheetahfly 在职认证  发表于 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")都能行得通。

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

板凳
马甲1号 发表于 2016-8-4 21:57:58
不加引号就是种语法糖吧。
比如library函数,通过如下语句将不加引号的包名转换为字符串:
  1.         if (!character.only)
  2.             package <- as.character(substitute(package))
复制代码

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

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 09:25