我想列出组中的唯一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