data.table在行

时间:2018-02-19 17:36:21

标签: r data.table

我有一个巨大的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)。

1 个答案:

答案 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]