我有一个巨大的data.table dt(差不多150万行) 说吧 我想将用户定义的函数growth.ls应用于其行,其中scols(dt中的某些列)是参数
growth.ls <- function(values){
if (any(!is.finite(values)) || any(values <= 0)) return(NA_real_)
exp(lm(log(values) ~ (seq_along(values)))$coefficients[[2]] - 1) * 100}
dt[, `:=`(var = growth.ls(as.numeric(.SD))), .SDcols = scols, by = 1:nrow(dt)]
这个过程需要很长时间,我不知道问题是否是grow.ls,或者我是因为我使用的是:1:nrow(dt)。
答案 0 :(得分:0)
这个怎么样(使用带有data.table的多核):
library(parallel)
cl = makeCluster(detectCores())
choose_cols = startsWith(colnames(df),'x')
df[,growth := unlist(parApply(cl, .SD, 1, growth.ls), .SDcols = choose_cols]