Rmarkdown中的插入符号doparallel:使用render()时缺少详细信息
Posted
技术标签:
【中文标题】Rmarkdown中的插入符号doparallel:使用render()时缺少详细信息【英文标题】:Caret doparallel in Rmarkdown: Missing verbose info when using render() 【发布时间】:2020-02-26 15:48:56 【问题描述】:我有以下简单的例子Rmarkdown
文档(test.Rmd):
---
title: "Test Knit Caret Paralell VerboseIter"
output: html_document
---
```r setup, include=FALSE
knitr::opts_chunk$set(echo = TRUE)
require(caret)
require(doParallel)
```
## data
```r data
set.seed(998)
training <- twoClassSim()
```
## model
```r fitmodel
fitControl <- trainControl(
method = "repeatedcv",
number = 3,
repeats = 2,
verboseIter = T)
ncores <- detectCores()-1
cl <<- makePSOCKcluster(ncores, verbose = TRUE, outfile = "")
registerDoParallel(cl)
set.seed(825)
Fit <- train(Class ~ .,
data = training,
method = "nnet",
trControl = fitControl,
trace = FALSE
)
stopCluster(cl)
registerDoSEQ()
```
## results
```r results
Fit
```
我有几个选项来运行此代码或编织文档
-
在 Rstudio 中使用“运行所有块”
在 Rstudio 中使用
Knit
按钮
Knit
带有render("test.Rmd")
的文档
会发生以下情况
-
在迭代时不会在输出或控制台中打印任何信息
信息打印在
R markdown
面板中
控制台中不会打印任何信息
在我从事的项目中,我想knit
具有不同参数的文档,所以我想使用最后一个选项。不过我也想看看拟合模型的进展。因此,我想使用选项 3。
当文档被渲染时,如何获取在控制台打印的迭代信息?
这是我希望看到的预期输出:
+ Fold1.Rep1: size=1, decay=0e+00
+ Fold1.Rep1: size=3, decay=0e+00
+ Fold1.Rep1: size=5, decay=0e+00
- Fold1.Rep1: size=1, decay=0e+00
+ Fold1.Rep1: size=1, decay=1e-01
- Fold1.Rep1: size=3, decay=0e+00
+ Fold1.Rep1: size=3, decay=1e-01
- Fold1.Rep1: size=5, decay=0e+00
+ Fold1.Rep1: size=5, decay=1e-01
- Fold1.Rep1: size=1, decay=1e-01
+ Fold1.Rep1: size=1, decay=1e-04
- Fold1.Rep1: size=3, decay=1e-01
+ Fold1.Rep1: size=3, decay=1e-04
- Fold1.Rep1: size=1, decay=1e-04
etc.
【问题讨论】:
【参考方案1】:这可能会产生您正在寻找的内容,改编自 here,当您使用 rstudio
中的 knit
按钮时,它基本上会复制,它会从 train
产生详细信息,但是使用此方法您应该能够将parameters
传递给render
。只需将路径更改为rmd
文件的wd
即可
owd = setwd("path/to/your-Rmd-directory")
system2("Rscript", c("-e", shQuote("library(rmarkdown); render('test.Rmd')"),
system2("html", "test.html"),
setwd(owd)))
【讨论】:
它有效。但是有什么方法可以阻止进程吗?当我在 Rstudio 中停止时,该过程似乎在后台继续。 @Wietze314 在 Rstudio 中使用stop
或 Esc
键对我有用。你也可以设置一个timeout
我在 Rstudio 中使用了stop
,它看起来好像停止了。但是当我查看任务管理器时,所有内核仍在 100% 运行。只有当我在任务管理器中手动关闭所有 R 会话时,它才会真正停止。【参考方案2】:
您可以在 Rmd 文件的顶部添加 knit_hook
以捕获控制台输出并在渲染时打印它们。
```r, include=FALSE
print_output <- function(x, options)
cat(x)
return(x)
knitr::knit_hooks$set(chunk = print_output)
```
【讨论】:
感谢您的回复。我尝试了您的解决方案,但它确实有效,但用于降价文件的输出仅打印到控制台。我如何确保用于降价的输出也打印在输出文件中。 @Wietze314 已编辑。如果函数返回输入,它也将打印在编织文件中。output
需要更改为chunk
以使字体一致。见yihui.name/knitr/hooks。
我还注意到,只有在chunk
代码完全执行时才会打印输出。所以学习过程中的进度没有打印出来,我想跟踪。以上是关于Rmarkdown中的插入符号doparallel:使用render()时缺少详细信息的主要内容,如果未能解决你的问题,请参考以下文章