将数据传递给data.table中具有未知数量的以编程方式定义的变量的函数

msp*_*msp 3 r data.table

我们假设我有以下代码:

x = data.table(rowid=1:10, N1=2:11, N2=3:12, N3=4:13)
x[, sum(c(N1, N2, N3)),by=rowid]
Run Code Online (Sandbox Code Playgroud)

现在假设我不知道列名N1,N2,N3,它们被保存在向量中colnames=c("N1", "N2", "N3").如果我知道要传递给的变量数量sum(),我可以colnames按如下方式插入:

x[, sum(c(get(colnames[1]),get(colnames[2]),get(colnames[3]))),by=rowid]
Run Code Online (Sandbox Code Playgroud)

现在假设我不知道它的长度colnames.有什么方法可以重写上面所以它有效吗?类似的东西x[, sum(c(sapply(colnames, as.name))),by=rowid](注意这个确切的表达不起作用).

G. *_*eck 5

这总结了所有列,除了rowid:

x[, sum(.SD), by = rowid]
Run Code Online (Sandbox Code Playgroud)

这只对在字符向量中命名的列进行求和colnames:

x[, sum(.SD), by = rowid, .SDcols = colnames]
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,总和都是rowid.