Caret doparallel in Rmarkdown: Fehlende ausführliche Informationen bei Verwendung von render ()

8

Ich habe das folgende einfache Beispieldokument 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
```

Ich habe mehrere Möglichkeiten, diesen Code auszuführen oder das Dokument zu stricken

  1. Verwenden Sie in Rstudio 'Alle Chuncks ausführen'
  2. Verwenden Sie die KnitSchaltfläche in Rstudio
  3. Knit Dokument mit render("test.Rmd")

Folgendes passiert

  1. Bei Iterationen werden keine Informationen in der Ausgabe oder in der Konsole gedruckt
  2. Informationen werden im R markdownPanel gedruckt
  3. In der Konsole werden keine Informationen gedruckt

In dem Projekt, an dem ich arbeite, möchte ich knitdas Dokument mit verschiedenen Parametern bearbeiten , daher möchte ich die letzte Option verwenden. Ich möchte jedoch auch die Fortschritte bei der Anpassung des Modells sehen. Dafür möchte ich Option 3 verwenden.

Wie kann ich die Informationen zu den Iterationen abrufen, die in der Konsole gedruckt werden, wenn die Dokumente gerendert werden?

Dies ist die erwartete Ausgabe, die ich sehen möchte:

+ 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.
Wietze314
quelle

Antworten:

2

Dies kann produzieren , was Sie suchen, aus angepasst hier , es repliziert im Wesentlichen , wenn Sie die Verwendung knitTaste in rstudio, die aus dem ausführlichen produziert train, jedoch mit dieser Methode sollten Sie in weitergeben können, parameterszu render. Ändern Sie einfach den Pfad zu wdIhrer rmdDatei

owd = setwd("path/to/your-Rmd-directory")
system2("Rscript", c("-e", shQuote("library(rmarkdown); render('test.Rmd')"),
            system2("html", "test.html"),
            setwd(owd)))
Matt
quelle
Es klappt. Aber gibt es eine Möglichkeit, den Prozess zu stoppen? Wenn ich in Rstudio aufhöre, scheint der Prozess im Hintergrund fortzusetzen.
Wietze314
1
@ Wietze314 Die Verwendung des stopin Rstudio oder des EscSchlüssels funktioniert bei mir. Sie können auch einentimeout
Matt
Ich habe stopin Rstudio verwendet, und es sah so aus, als hätte es aufgehört. Aber wenn ich mir den Task-Manager anschaue, laufen alle Kerne immer noch zu 100%. Nur wenn ich alle R-Sitzungen im Task-Manager manuell herunterfahre, wird es wirklich gestoppt.
Wietze314
0

Sie können knit_hookoben in der Rmd-Datei ein hinzufügen, um die Konsolenausgaben zu erfassen und beim Rendern zu drucken.

```{r, include=FALSE}
print_output <- function(x, options) {
  cat(x)
  return(x)
}
knitr::knit_hooks$set(chunk = print_output)
```
Feng Mai
quelle
Danke für Ihre Antwort. Ich habe Ihre Lösung ausprobiert, aber es funktioniert, aber die für die Markdown-Datei bestimmte Ausgabe wird nur auf der Konsole gedruckt. Wie kann ich sicherstellen, dass die für den Abschlag bestimmte Ausgabe (auch) in der Ausgabedatei gedruckt wird?
Wietze314
@ Wietze314 bearbeitet. Wenn die Funktion die Eingabe zurückgibt, wird sie auch in der gestrickten Datei gedruckt. outputmuss geändert werden chunk, um die Schriftarten konsistent zu machen. Siehe yihui.name/knitr/hooks .
Feng Mai
Mir ist auch aufgefallen, dass die Ausgabe nur gedruckt wird, wenn der chunkCode vollständig ausgeführt wurde. Der Fortschritt während des Lernens wird also nicht gedruckt, was ich verfolgen wollte.
Wietze314