我正在尝试实现类似进度条的东西,以便在估计某些函数的值时使用。该功能需要很长时间才能处理。有什么方法可以从 server.R 发送一些功能已完成的指标,所以我可以在 index.html 文件中隐藏进度条。我的代码如下:
<!DOCTYPE html>
<head>
<script src="shared/jquery.js" type="text/javascript"></script>
<script src="shared/shiny.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="shared/shiny.css"/>
</head>
<body onload="progressbar.style.display='none';">
<table><tbody>
<tr>
<td align="right" ><label>Sample Input:</label></td>
<td><input type="text" id="ns" value="10" title="Sample Size"></td>
</tr>
<tr>
<td align="right" > </td>
<td><input class="button" type="submit" id="calc" name="calc" value="Calculate" onclick="progressbar.style.display='block';"></td>
</tr>
<tr>
<td align="right" > </td>
<td> </td>
</tr>
<tr>
<td align="right" ><label id="result"> Power:</label></td>
<td ><div id="sampleSize" class="shiny-text-output" ></div></td>
</tr>
<tr>
<td align="right" > </td>
<td><progress id="progressbar" value="50" max="100" ></progress> </td>
</tr>
</tbody></table>
</body>
</html>
我的 server.R 文件如下所示:
library(shiny)
shinyServer(function(input, output) {
data <- reactive({
ns<-as.numeric(input$ns)
})
## set variable on loading the page
firstTime <- TRUE
# Generate an output
output$sampleSize <- renderText({
## get the data
data<-data()
if (!firstTime) {
## execute some long function
Sys.sleep(5)
## return the output value from the above function
return(as.character(data[1]))
}
else{
firstTime<<-FALSE ## supress output on loading the page
return(NULL)
}
})
})