我想知道是否可以通过替换命令解除表达式中传递的字符串引用。
具体来说,我正在使用dplyr从数据框中筛选和选择:
> w
subject sex response
1 1 M 19.08
2 2 M 16.46
... ... ... ...
6 6 M 23.60
7 7 M 23.96
8 8 F 22.48
9 9 F 25.79
... ... ... ...
16 16 F 26.66
以下代码可以得到所需结果:
> w %.% filter(sex == "M") %.% select(response)
response
1 19.08
2 16.46
3 22.81
4 18.62
5 18.75
6 23.60
7 23.96
但我希望以更一般的方式来做。下面的方法并不能产生所需的结果,因为字符串"sex"被引号括起来了。
substitute(w %.% filter(y == "M"), list(y = paste(names(w)[2])))
w %.% filter("sex" == "M")
> eval(substitute(w %.% filter(y == "M"), list(y = paste(names(w)[2]))))
[1] subject sex response
<0 rows> (or 0-length row.names)
我始终可以做到以下几点:
eval(parse(text = paste("w %.% filter(", names(w)[2], " == 'M')")))
然而,这看起来有点笨拙。
有更优雅的方法吗?最终,我想将其封装在一个函数中,并使其更加通用。
任何帮助/建议都将不胜感激。
祝好,
斯特凡
as.name()
。 - hadley