r - 有没有比 rowwise() 更快的方法将函数按行应用于 tibble 的一列?

标签 r dplyr tidyverse purrr

我有一个 tibble df,其中每一行都包含一个后验分布列表(beta)(4000 个样本)。我想使用 bayestestR::bayesfactor_parameters 计算贝叶斯因子,但我使用 rowwise() 的方法非常慢(大约 3000 行需要 20 分钟)。您知道将此函数应用于小标题的每一行的更快方法吗?非常感谢。

df <- tibble(idx = seq(1, 3000), beta = list(rnorm(4000, 0.5, 3)))
df <- df %>% 
  slice(1:10) %>% 
  rowwise() %>% 
  mutate(ioi = bayestestR::
           bayesfactor_parameters(posterior = unlist(beta), prior = rnorm(1e4, 0, 10), 
                                  direction = "two-sided", 
                                  null = c(-1, 1))$log_BF) %>% 
  ungroup()

最佳答案

是的!使用 multidplyr 并行申请

cluster <- new_cluster(parallel::detectCores() - 2)
cluster_library(cluster, c('tidyverse', 'furrr'))
cluster_copy([...])
df %>% 
    rowwise() %>% 
    partition(cluster) %>% 
    mutate([...]) %>% 
    collect()

关于r - 有没有比 rowwise() 更快的方法将函数按行应用于 tibble 的一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72466871/

相关文章:

r - 如何在 Shiny 中使数据集响应式?

r - 了解 dplyr group_by 与 tapply 之间的结果差异

r - 在 purrr 的 map() 函数中使用 levene_test?

r - tidyr:Pivot_wider 用数据类型替换值

r - 如何将 R 数据框保存到 Excel 文件,其中某些单元格以粗体显示?

r - 从 R 中的一系列分组变量中提取第一个值来计算行程时间

r - (1-previous_record)*current_record 的累积积

根据另一个不同大小的数据框替换所选列的值

r - 如何更改 Shiny 条的颜色

r - 如何从已排序矩阵列的一部分中获取列名?