Rmarkdownのキャレットdoparallel:render()を使用すると詳細情報が欠落する


8

次の簡単なサンプル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で「すべてのチャンクを実行」を使用する
  2. KnitRstudioのボタンを使用する
  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.

回答:


2

これは、あなたがから適応、探しているものを作り出すことが、ここで使用するとき、それは本質的に複製knit中のボタンrstudioから冗長を生成し、trainしかし、あなたが渡すことができる必要があり、この方法で使用して、parametersにをrender。ただへのパスを変更しwd、あなたのrmdファイル

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

1
@ Wietze314 stopRstudioまたはEscキーを使用するとうまくいきます。次の設定も可能ですtimeout
Matt

stopはRstudioで使用していて、停止したように見えました。しかし、タスクマネージャーを見ると、すべてのコアが100%で実行されています。タスクマネージャーですべてのRセッションを手動でシャットダウンした場合にのみ、本当に停止します。
Wietze314

0

knit_hookRmdファイルの上部にを追加して、コンソール出力をキャプチャし、レンダリング中にそれらを印刷できます。

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

返信してくれてありがとう。私はあなたの解決策を試しましたが、それは一種の仕事ですが、マークダウンファイルを意図した出力は、コンソールにのみ出力されます。マークダウン用の出力が出力ファイルに出力されていることを確認するにはどうすればよいですか(あまりにも)。
Wietze314

@ Wietze314編集。関数が入力を返す場合、それはニットファイルにも出力されます。フォントを統一するためにoutput変更する必要がありchunkます。yihui.name/knitr/hooksを参照してください。
風水マイ

また、chunkコードが完全に実行された場合にのみ出力が出力されることにも気付きました。したがって、学習中の進捗状況は印刷されません。追跡したかったのです。
Wietze314
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.