Rmarkdown 中的 Caret doparallel:使用 render() 时缺少详细信息

Caret doparallel in Rmarkdown: Missing verbose info when using render()

我有以下简单示例 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
```

我有几个选择运行这个代码或者编织文档

  1. 在 Rstudio 中使用 'Run all chuncks'
  2. 在 Rstudio 中使用 Knit 按钮
  3. Knit 文档 render("test.Rmd")

发生以下情况

  1. 没有信息在迭代中打印在输出或控制台中
  2. 信息打印在 R markdown 面板中
  3. 控制台中未打印任何信息

在我工作的项目中,我想 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.

您可以在 Rmd 文件的顶部添加一个 knit_hook 以捕获控制台输出并在渲染时打印它们。

```{r, include=FALSE}
print_output <- function(x, options) {
  cat(x)
  return(x)
}
knitr::knit_hooks$set(chunk = print_output)
```

这可能会产生您正在寻找的内容,改编自 ,当您在 rstudio 中使用 knit 按钮时,它基本上会复制,这会产生 [=] 的详细信息13=],但是使用此方法,您应该能够将 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)))