R:如何安静的tidyverse时,附加到多个核心.(Rmarkdown)



当将我的Rmarkdown初始化到集群中的每个核心时,它只是打印它所附加的所有包。我已经尝试了一切,如suppressPackageStartupMessages()和添加quiet = TRUE和/或verbose = FALSE。没有工作!

下面是一个可重复的例子(越多的内核在html中看起来越混乱)。

knitr::opts_chunk$set(echo = TRUE)
library(parallel)
#Assign cores to a cluster.
cl <- makeCluster(detectCores())
#The cluster needs tidyverse
clusterEvalQ(cl,suppressPackageStartupMessages(library(tidyverse, quietly = TRUE, verbose = FALSE)))

编辑1:我还尝试添加{r,警告=FALSE,消息=FALSE}到我的r块头。

编辑2:未安装tidyverse(初始化2个内核)的用户输出:

## [[1]]
##  [1] "forcats"   "stringr"   "dplyr"     "purrr"     "readr"     "tidyr"    
##  [7] "tibble"    "ggplot2"   "tidyverse" "stats"     "graphics"  "grDevices"
## [13] "utils"     "datasets"  "methods"   "base"     
## 
## [[2]]
##  [1] "forcats"   "stringr"   "dplyr"     "purrr"     "readr"     "tidyr"    
##  [7] "tibble"    "ggplot2"   "tidyverse" "stats"     "graphics"  "grDevices"
## [13] "utils"     "datasets"  "methods"   "base"  

作为解决方案,您可以使用capture.output:

void <- capture.output(clusterEvalQ(cl,{library(tidyverse)}))

问题实际上是需要沉默的clusterEvalQ()。试试invisible()。使用MASS包进行演示:

library(parallel)
cl <- makeCluster(detectCores())
invisible(clusterEvalQ(cl, library(MASS)))
r <- parSapply(cl=cl, X=seq(cl), FUN=function(i) names(sessionInfo()[[7]]))
stopCluster(cl)
结果

> library(parallel)
> cl <- makeCluster(detectCores())
> invisible(clusterEvalQ(cl, library(MASS)))
> r <- parSapply(cl=cl, X=seq(cl), FUN=function(i) names(sessionInfo()[[7]]))
> stopCluster(cl)
> 
> r
[1] "MASS" "MASS" "MASS" "MASS" "MASS" "MASS" "MASS" "MASS"

MASS似乎在所有集群上加载,而没有烦人的控制台输出。

最新更新