reducemix_q_text <- function(charvar,reducevar){
d <- data.table(charvar,reducevar)
t <- substitute(reducevar)
d2 <- d[,.(gs=paste0(reducevar,collapse=',')),charvar]
d2[,out:= paste0(t,'(',gs,'): ',charvar)]
d2$out %>% paste0(collapse ='; ') %>% return
}
#reprex tests: OK
t2 <- c('a','a','b')
q2 <- 0:2
reducemix_q_text(t2,q2)
[1] "q2(0,1): a; q2(2): b"
dt <- data.table(t=c(t2,t2), mygroup=c('w','w','s','s'))
dt[,.(tex=reducemix_q_text(t2,q2)) , by=mygroup]
mygroup tex
1: w q2(0,1): a; q2(2): b
2: s q2(0,1): a; q2(2): b
根据最后一行,即使按分组使用,该函数也可以工作。然而,当我试图在实际数据上使用完全相同的syintax时,我得到了错误:
dics[,.(tex=reducemix_q_text(desc,q)) , by=.(a,b,tab,varname,type)]
Error in `[.data.table`(d, , .(gs = paste0(reducevar, collapse = ",")), :
column or expression 1 of 'by' or 'keyby' is type closure. Do not quote column names. Usage: DT[,sum(colC),by=list(colA,month(colB))]
我还使用仅dplyr函数重新实现了该函数,但在我自己的master data.table中按组应用时,出现了另一个错误。同样,它通过了测试,但在实际数据上失败:
reducemix_q_text2 <- function(charvar,reducevar){
d <- tibble(charvar,reducevar)
t <- substitute(reducevar)
d2 <- d %>% group_by(charvar) %>% mutate(gs=paste0(reducevar,collapse=','))
d2 %>%
mutate(out=paste0(t,'(',gs,'): ',charvar)) %>% .$out %>% paste0(collapse ='; ') %>% return
}
reducemix_q_text2(t2,q2)
dt[,.(tex=reducemix_q_text(t2,q2)) , by=mygroup]
dics[,.(tex=reducemix_q_text2(desc,q)) , by=.(a,b,tab,varname,type)]
Error: All columns in a tibble must be vectors.
x Column `charvar` is a function.
Run `rlang::last_error()` to see where the error occurred.