我正在尝试构建一个闪亮的应用程序,通过不同的 render* 函数输出多个结果。
问题是其中一个结果需要一些时间来计算。所以我希望shiny能够尽快渲染出快速的结果。
这是一些代码来说明
# ui.R
library(shiny)
shinyUI(fluidPage(
textOutput("res1"),
textOutput('res2')
))
# server.R
library(shiny)
shinyServer(function(input, output) {
output$res1 = renderText({
"shows up instantly"
})
output$res2 = renderText({
Sys.sleep(3)
"shows up after 3 sec"
})
})
目前,网页保持空白 3 秒,两个元素同时呈现。
我的问题如下:是否可以强制执行output$res1
在之前执行output$res2
并在长计算开始之前将结果发送到浏览器?
查看稍后无效 https://gist.github.com/trestletech/8608815否则,如果您只想渲染文本,您可以使用以下命令将文本直接发送到客户端:
# ui.R
library(shiny)
ui <- shinyUI(fluidPage(
tags$head(
tags$script(
HTML("
Shiny.addCustomMessageHandler ('print',function (message) {
$('#'+message.selector).html(message.html);
console.log(message);
});
")
)
),
textOutput("res1"),
textOutput('res2')
))
# server.R
server <- shinyServer(function(input, output, session) {
session$sendCustomMessage(type = 'print', message = list(selector = 'res1', html = "shows up instantly"))
Sys.sleep(3)
session$sendCustomMessage(type = 'print', message = list(selector = 'res2', html = "shows up after 3 sec"))
})
shinyApp(ui = ui, server = server)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)