小编Tel*_*roz的帖子

如何在data.table中执行更快的列表列操作

由于内存(和速度)问题,我希望在data.table内进行一些计算,而不是在data.table外进行。

以下代码有100.000行,但我正在处理4000万行。

library(tictoc)
library(data.table) # version 1.11.8
library(purrr)
library(furrr)
plan(multiprocess)

veryfing_function <- function(vec1, vec2){
  vector <- as.vector(outer(vec1, vec2, paste0))
  split(vector, ceiling(seq_along(vector)/length(vec1)))
}


dt <- data.table(letters = replicate(1e6, sample(letters[1:5], 3, TRUE), simplify = FALSE),
                 numbers = replicate(1e6, sample(letters[6:10], 3, TRUE), simplify = FALSE))



tic()
result1 <- future_map2(dt$letters, dt$numbers, veryfing_function)
toc()


tic()
result2 <- mapply(veryfing_function, dt$letters, dt$numbers, SIMPLIFY = FALSE)
toc()



tic()
dt[, result := future_map2(letters, numbers, veryfing_function)]
toc()


tic()
dt[, result2 := mapply(veryfing_function, letters, numbers, SIMPLIFY = FALSE)]
toc()

Run Code Online (Sandbox Code Playgroud)

所有变体的输出都是相同的,并且符合预期。基准是:

26秒72秒38秒105秒,所以我看不到使用data.table内的函数或使用mapply的优势。 …

r mapply data.table furrr

5
推荐指数
1
解决办法
112
查看次数

标签 统计

data.table ×1

furrr ×1

mapply ×1

r ×1