2013-05-22 149 views
3

数目不详的程序定义的变量的假设我有以下代码:将数据传递给函数在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] 

现在假设我不知道列名N1,N2,N3提前,他们被保存在向量colnames=c("N1", "N2", "N3")。如果我知道的变量的数量传递给sum(),我可以在colnames插上如下:

x[, sum(c(get(colnames[1]),get(colnames[2]),get(colnames[3]))),by=rowid] 

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

回答

5

该总结的所有列,除了rowid

x[, sum(.SD), by = rowid] 

此总结只有在特征向量colnames命名这些列:

x[, sum(.SD), by = rowid, .SDcols = colnames] 

在这两种情况下的款项是由rowid

+0

布拉沃,非常感谢! – msp