我想知道是否有人可以帮助htmlwidgets和相关的渲染函数如何在promises
中使用promises(即future
和shiny
包)。
我一直在阅读并学习如何根据Joe Chengs的文章和rstudioconf talk来整合这些东西。 E.g
https://medium.com/@joe.cheng/async-programming-in-r-and-shiny-ebe8c5010790 https://medium.com/@joe.cheng/an-informal-intro-to-async-shiny-cbf01c85c4c5
https://www.rstudio.com/resources/videos/scaling-shiny-apps-with-async-programming/(顺便说一句好话)
关于DT的promises
软件包的github repo上引发了一个问题,但据说大多数htmlwidget软件包都不需要修改。
https://github.com/rstudio/promises/issues/10
我已经尝试过很多东西来让htmlwidgets从promises中呈现出来但却无法使用闪亮的工具。例如,对于dygraphs
和leaflet
,以下在闪亮之外工作(标准plot()
也包含在内作为参考)
library(promises)
library(future)
plan(multiprocess)
library(shiny)
library(leaflet)
library(dygraphs)
expensive_operation = function(){
Sys.sleep(2)
data.frame(x=runif(10))
}
future({ expensive_operation() }) %...>% plot
future({ expensive_operation() }) %...>%
{leaflet(.) %>% addTiles() %>% addMarkers(~x,~x) %>% print}
future({ expensive_operation()}) %...>% {
dygraph(.) %>% print
}
到目前为止一切都很好。
我已经从github安装了shiny
的开发版本。但是在下面:
ui = fluidPage(
leafletOutput("l"),
plotOutput("p"),
dygraphOutput("d")
)
server = function(input, output, session) {
output$p = renderPlot({
future({ expensive_operation() }) %...>% plot
})
output$l <- renderLeaflet({
## neither
# future({ expensive_operation() }) %...>%
# {leaflet(.) %>% addTiles() %>% addMarkers(~x,~x) %>% print} # prints in rstudio viewer
# nor
future({ expensive_operation() }) %...>%
{leaflet(.) %>% addTiles()%>% addMarkers(~x,~x)} # does nothing
# work
})
#similar story to leaflet
output$d = renderDygraph({
# future({ expensive_operation()}) %...>% {
# dygraph(.) %>% print
# }
future({ expensive_operation()}) %...>% {
dygraph(.)
}
})
}
runApp(shinyApp(ui,server))
只有标准图实际渲染。调用print
或其他版本的注释版本都不会在闪亮的应用内部执行任何操作。包括print
允许将其打印到rstudio查看器,但这不符合目的。
有没有人对我误解或出错的地方有任何建议?