【发布时间】:2017-02-13 14:58:53
【问题描述】:
我想列出组内的唯一 ID,其中分组变量可以由用户选择。以下作品:
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') -
这样做并得到了这个非常描述性的错误!
Error in `[.data.table`(tabla, if (identical(codificacion[[1]][i]$codCIE, : 'by' appears to evaluate to column names but isn't c() or key(). Use by=list(...) if you can. Otherwise, by=eval(if (!porEESS) { c("cod_dpto", "cod_prov", "cod_dist")} else { cod_2000}) should work. This is for efficiency so data.table can detect which columns are needed. -
或者只是在您的
[电话上方添加一行:group_var = if (...) else。然后dt[ , , by = group_var]. -
我明白了。那么是的,我的第二条评论应该有效。
标签: r data.table