我敢肯定,我之前已经解决了这个问题,并在网上找到了一个或两个hack,但是在暂时不使用data.table之后,现在无法正确完成它。所以我想知道:对于像这样的用例,传递多个列名称的确切解决方案是什么:
library(data.table)
data(mtcars)
dt <- data.table(mtcars)
cols <- c("mpg","cyl","qsec")
dt[,key := paste('prefix',
get(cols[1]),
get(cols[2]),
get(cols[3]),
sep = ".")]
如何在不显式提及所有列的情况下完成粘贴。
显然,将cols向量简单地传递到get
会很棒。但是,这仅指第一个参数,其余参数则被忽略。
我记得@MattDowle指出我不要在我的旧软件包中使用eval(as.name())
,因为我认为这也不是正确的解决方案...
答案 0 :(得分:1)
在这种情况下,我们可以在.SDcols
中指定它,并将do.call
与paste
一起使用
dt[, key := do.call(paste, c('prefix', .SD, sep=".")), .SDcols = cols]
或者使用.SDcols
dt[, key := do.call(paste, c('prefix', mget(cols), sep="."))]