Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R data.table在行上应用用户定义的函数_R_Data.table - Fatal编程技术网

R data.table在行上应用用户定义的函数

R data.table在行上应用用户定义的函数,r,data.table,R,Data.table,我有一个巨大的data.dt表(大约150万行) 比方说 我想将一个用户定义的函数growth.ls应用到它的行中,其中scol(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)

我有一个巨大的data.dt表(大约150万行) 比方说 我想将一个用户定义的函数growth.ls应用到它的行中,其中scol(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)]
growth.ls这是怎么回事(使用带data.table的多核):


是的,这不是使用data.frame或data.table的好方法——您将数据拆分为大量行,然后将data.table中的每一行强制转换为数字向量。试着用
melt
将数据放在长格式中,而不是使用
lm.fit
可能会大大加快速度;预先分配模型矩阵(
X)有没有可能提供一个例子让我试试。现在不行。也许其他人会来提供一个。相关:和滚动版本:说真的,我不知道该说什么,除了非常感谢你的帮助和支持。并行是强大的,消耗所有处理器高达99%,并在5分钟内完成所有工作。很高兴知道。如果答案能解决您的问题,请接受它。它有助于我们跟踪。)
library(parallel)
cl = makeCluster(detectCores())
choose_cols = startsWith(colnames(df),'x')

df[,growth := unlist(parApply(cl, .SD, 1, growth.ls), .SDcols = choose_cols]