使用“dplyr”查找大标题的行均值和方差的最快方法是什么?

Tay*_*r F 3 optimization r dplyr

我希望为数字小标题中的每一行生成均值和方差值。使用我现有的代码(我认为这是一个非常适合 dplyr 的解决方案),需要几个小时才能完成 50,000 行约 35 列的工作。

有没有办法仅使用 dplyr 来加速此操作?我知道 apply 和 purrr 是选项,但我最好奇的是,在执行这样的大量计算时,我是否忽略了 dplyr 的某些内容。

可重现的例子:

library(tidyverse)
library(vroom)
gen_tbl(50000, cols = 40, 
        col_types = paste0(rep("d", 40), collapse = "")) %>%
  rowwise() %>%
  mutate(mean = mean(c_across()),
         var = var(c_across()))
Run Code Online (Sandbox Code Playgroud)

我的怀疑在于,rowwise()但我很感兴趣是否有一种更细致的方法可以用 dplyr 解决这个问题,或者这不是 dplyr 擅长的问题。

Jon*_*ing 5

行式方法的处理时间似乎呈二次爆炸:

在此输入图像描述

旋转时间更长会使计算速度加快约 300 倍。对于 50k 行,下面的代码花费了 1.2 秒,而该rowwise方法花费了 372 秒。

df %>%
  mutate(row = row_number()) %>%
  tidyr::pivot_longer(-row) %>%
  group_by(row) %>%
  summarize(mean = mean(value),
            var = var(value)) %>%
  bind_cols(df, .)
Run Code Online (Sandbox Code Playgroud)