【发布时间】:2016-09-11 13:23:54
【问题描述】:
第一次调用函数 f 有效,第二次无效。如何将字符串 ("v") 传递给函数 f 以使函数按预期工作?
library(data.table)
f<-function(t,x) t[,deparse(substitute(x)),with=F]
dat<-data.table(v="a")
f(dat,v)
# v
# 1: a
f(dat,eval(parse(text="v")))
# Error in `[.data.table`(t, , deparse(substitute(x)), with = F) :
# column(s) not found: eval(parse(text = "v"))
【问题讨论】:
-
在
dat[, mget(col)]或.SD中使用mget(),在dat[, .SD, .SDcols=cols]中使用.SDcols,其中cols = "v"。允许相同的函数参数具有(列的)符号和作为字符向量会带来麻烦和歧义。
标签: r data.table nse