Caret doparallel en Rmarkdown: falta información detallada cuando se usa render ()

8

Tengo el siguiente Rmarkdowndocumento de ejemplo simple (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
```

Tengo varias opciones para ejecutar este código o tejer el documento

  1. Use 'Ejecutar todos los fragmentos' en Rstudio
  2. Use el Knitbotón en Rstudio
  3. Knit documento con render("test.Rmd")

Sucede lo siguiente

  1. No se imprime información en la salida o la consola en las iteraciones
  2. La información se imprime en el R markdownpanel
  3. No se imprime información en la consola

En el proyecto en el que trabajo quiero knitel documento con diferentes parámetros, así que quiero usar la última opción. Sin embargo, también quiero ver el progreso en el ajuste del modelo. Por eso quiero usar la opción 3.

¿Cómo puedo obtener la información de las iteraciones impresas en la consola cuando se procesan los documentos?

Esta es la salida esperada que quiero ver:

+ 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
fuente

Respuestas:

2

Esto puede producir lo que usted está buscando, adaptado a partir de aquí , que, esencialmente, se replica cuando se utiliza el knitbotón rstudio, lo que produce el modo de detalle de train, sin embargo el uso de este método debe ser capaz de pasar en parametersa render. Simplemente cambie la ruta a la wdde su rmdarchivo

owd = setwd("path/to/your-Rmd-directory")
system2("Rscript", c("-e", shQuote("library(rmarkdown); render('test.Rmd')"),
            system2("html", "test.html"),
            setwd(owd)))
Mate
fuente
Funciona. Pero, ¿hay alguna forma de detener el proceso? Cuando me detengo en Rstudio, el proceso parece continuar en segundo plano.
Wietze314
1
@ Wietze314 Usar stopen Rstudio o la Esctecla me funciona. También puede establecer untimeout
Matt
Utilicé stopen Rstudio, y parecía que se detuvo. Pero cuando miro el administrador de tareas, todos los núcleos siguen funcionando al 100%. Solo cuando apago manualmente todas las sesiones de R en el administrador de tareas, realmente se detiene.
Wietze314
0

Puede agregar una knit_hooken la parte superior del archivo Rmd para capturar los resultados de la consola e imprimirlos mientras se procesa.

```{r, include=FALSE}
print_output <- function(x, options) {
  cat(x)
  return(x)
}
knitr::knit_hooks$set(chunk = print_output)
```
Feng Mai
fuente
Gracias por la respuesta. Intenté su solución, pero funciona, pero la salida destinada para el archivo de descuento se imprime solo en la consola. ¿Cómo puedo asegurarme de que la salida destinada a la rebaja también se imprima en el archivo de salida?
Wietze314
@ Wietze314 Editado. Si la función devuelve la entrada, también se imprimirá en el archivo tejido. outputdebe cambiarse chunkpara que las fuentes sean coherentes. Ver yihui.name/knitr/hooks .
Feng Mai
También noté que la salida se imprime solo cuando el chunkcódigo se ha ejecutado completamente. Entonces, el progreso durante el aprendizaje no se imprime, lo que quería rastrear.
Wietze314