我想列出組中的唯一ID,其中可以由用戶選擇分組變量。以下作品:使用data.table中的條件時,下標越界
if(useGroupVar1){
dt[,unique(id),.(group1a,group1b,group1c)]
} else {
dt[,unique(id),group2]
}
我在我的代碼中用來過濾行的表達式實際上相當長,所以我想避免重複代碼。我想出了這個「解決方案」,這實際上並沒有正常工作:
dt[,unique(id),if(useGroupVar1){.(group1a,group1b,group1c)}else{group2}]
如果條件導致單獨使用group2
,它的工作原理(雖然列名爲if
),而是試圖得到它使用.(group1a,group1b,group1c)
eval(expr,envir,enclos)中的錯誤:找不到函數「。」現在
,我讀.()
是一個別名list()
,所以採用後者讓我在bysubl [JJ + 1L]這個
錯誤:下標越界
有沒有辦法在不復制整個表達式的情況下實現條件by
?
你有嘗試一個正常的字符向量(引用)? –
我會做到這一點:'by = if(useGroupVar1)paste0('group1',c('a','b','c'))else'group2')' – MichaelChirico
這樣做,並得到這個非常描述性的錯誤! '[.data.table'錯誤'(tabla,if(identical(codificacion [[1]] [i] $ codCIE,: 'by')似乎評估爲列名,但不是c()或如果可以,則使用by = list(...)否則,通過= eval(if(!porEESS){c(「cod_dpto」,「cod_prov」,「cod_dist」)} else {cod_2000})應該工作,這是爲了提高效率,所以data.table可以檢測到需要哪些列。' – zipzapboing