2013-05-22 189 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