Caret doparallel in Rmarkdown: informações detalhadas ausentes ao usar render ()

8

Eu tenho o seguinte Rmarkdowndocumento de exemplo simples (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
```

Eu tenho várias opções para executar este código ou tricotar o documento

  1. Use 'Executar todos os chuncks' no Rstudio
  2. Use o Knitbotão no Rstudio
  3. Knit documento com render("test.Rmd")

O seguinte acontece

  1. Nenhuma informação é impressa na saída ou no console nas iterações
  2. As informações são impressas no R markdownpainel
  3. Nenhuma informação é impressa no console

No projeto em que trabalho, quero knito documento com parâmetros diferentes, então quero usar a última opção. No entanto, também quero ver o progresso no ajuste do modelo. Para isso, quero usar a opção 3.

Como posso obter as informações das iterações impressas no console quando os documentos são renderizados?

Esta é a saída esperada que eu quero 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
fonte

Respostas:

2

Isso pode produzir o que você está procurando, adaptado a partir de aqui , é essencialmente replica quando você usa o knitbotão rstudio, que produz o detalhado a partir train, porém utilizando este método, você deve ser capaz de passar parameterspara render. Apenas mude o caminho para o wddo seu rmdarquivo

owd = setwd("path/to/your-Rmd-directory")
system2("Rscript", c("-e", shQuote("library(rmarkdown); render('test.Rmd')"),
            system2("html", "test.html"),
            setwd(owd)))
Matt
fonte
Funciona. Mas existe alguma maneira de parar o processo? Quando paro no Rstudio, o processo parece continuar em segundo plano.
Wietze314 15/11/19
1
@ Wietze314 Usar o stopRstudio ou a Esctecla funciona para mim. Você também pode definir umtimeout
Matt
Eu usei stopno Rstudio, e parecia que ele parou. Mas quando olho para o gerenciador de tarefas, todos os núcleos ainda estão funcionando 100%. Somente quando eu encerro manualmente todas as sessões R no gerenciador de tarefas, ele realmente para.
Wietze314
0

Você pode adicionar um knit_hookna parte superior do arquivo Rmd para capturar as saídas do console e imprimi-las durante a renderização.

```{r, include=FALSE}
print_output <- function(x, options) {
  cat(x)
  return(x)
}
knitr::knit_hooks$set(chunk = print_output)
```
Feng Mai
fonte
Obrigado pela resposta. Tentei sua solução, mas funciona, mas a saída destinada ao arquivo de remarcação é impressa apenas no console. Como posso ter certeza de que a saída destinada à redução também é impressa no arquivo de saída.
Wietze314
@ Wietze314 Editado. Se a função retornar a entrada, ela também será impressa no arquivo tricotado. outputprecisa ser alterado para chunkpara tornar as fontes consistentes. Veja yihui.name/knitr/hooks .
Feng Mai
Também notei que a saída é impressa apenas quando o chunkcódigo foi totalmente executado. Portanto, o progresso durante o aprendizado não é impresso, o que eu queria acompanhar.
Wietze314