我有以下功能,运行了100多次。这种聚合是我代码中的瓶颈。仅仅使用data.table或者使用rcpp重写这个函数,是否有可能使其更快?
logit.gr <- function(DT){
temp1 <- DT[, lapply(.SD, function(x) col1*sum(y*(x - sum(x*exp(col2))))), by = .(main_idx), .SDcols = c('col3','col4')]
return(-colSums(temp1[, c('col3','col4'), with = F]))
}DT在哪里
DT <- data.table(main_idx = c(rep('A',4), rep('B', 5)), col1 = runif(9), col2 = -2+runif(9), col3 = 1+runif(9), col4 = 1+runif(9), y = runif(9))发布于 2018-04-09 18:09:49
我认为优化的目的是:
sum本身使用的函数中添加lapply。在结果的main_idx中,它将导致每个data.table只有1行。[操作符链应用于sum列col3和col4。library(data.table)
DT[, lapply(.SD, function(x) sum(col1*sum(y*(x - sum(x*exp(col2)))))),
by = .(main_idx), .SDcols = c('col3','col4')][
,.(col3 = -sum(col3), col4 = -sum(col4))]
#Result
# col3 col4
#0.7575290 0.2423651 数据:
DT <- data.table(main_idx = c(rep('A',4), rep('B', 5)),
col1 = runif(9), col2 = -2+runif(9),
col3 = 1+runif(9), col4 = 1+runif(9), y = runif(9))https://stackoverflow.com/questions/49738044
复制相似问题