当将我的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似乎在所有集群上加载,而没有烦人的控制台输出。