【发布时间】:2018-07-10 07:52:18
【问题描述】:
我目前正在开发一个基于 R markdown 和 shiny 的用户界面,以便为不精通 R 的其他用户轻松执行机器学习训练过程。这个训练过程是由围绕 R 包的自定义构建函数完成的 mxnet 并在“正常”R 脚本中运行时将状态更新(例如训练错误或使用 message() 函数加载的包直接发送到控制台)。但是,在 R markdown 中运行此应用程序时,浏览器不会打印任何内容。以下脚本显示了一个最小的可重现示例(将训练过程替换为简单的“虚拟”函数):
---
title: "Training of a Neural Network"
output: html_document
runtime: shiny
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r start_training, echo=F}
inputPanel(
actionButton("button_start_training", "Start training")
)
```
```{r dummy_function, echo=F}
dummy_function <- function(){
for(i in 1:5){
message(paste0("Test: "),i)
Sys.sleep(0.5)
}
}
```
```{r actual_training, echo=F}
event_training = eventReactive(input$button_start_training,{
dummy_function()
})
renderPrint({
event_training()
})
```
dummy_function() 的控制台输出不显示在浏览器中,而仅显示在控制台中。如果message() 被print() 替换,结果中会显示is,但仅在之后函数完成,而不是“live” .因为实际的训练过程需要几个小时,所以我想提供这些更新,因为它们会在控制台中发生。此外,将message() 替换为print() 可能会导致一些问题,因为在mxnet 培训过程中,培训错误之类的信息会作为消息而不是打印(如果我理解正确的话)返回。
所以,这归结为两个问题:
- 有没有办法让
renderPrint()一出现就打印输出? - 有没有办法让
renderPrint()使用message()生成的输出而不是print()?
感谢您的帮助。
【问题讨论】:
标签: r machine-learning shiny r-markdown mxnet