R 如何在依赖项可用时动态加载闪亮的输出?
我有一个闪亮的应用程序,有一个输入对象,它是两个输出对象的依赖项 第一个输出对象直接获取输入值,第二个输出对象需要进一步计算输入对象值 我想在更改输入对象后立即加载第一个输出对象,并在进一步计算结束后加载第二个输出对象 问题在于,即使第一个输出对象的依赖项早于第二个输出对象的依赖项,但这两个对象都是同时加载的 这是我的可复制代码。我想在更改R 如何在依赖项可用时动态加载闪亮的输出?,r,shiny,R,Shiny,我有一个闪亮的应用程序,有一个输入对象,它是两个输出对象的依赖项 第一个输出对象直接获取输入值,第二个输出对象需要进一步计算输入对象值 我想在更改输入对象后立即加载第一个输出对象,并在进一步计算结束后加载第二个输出对象 问题在于,即使第一个输出对象的依赖项早于第二个输出对象的依赖项,但这两个对象都是同时加载的 这是我的可复制代码。我想在更改slider1后立即显示plot1,并使plot2的微调器保持打开状态,直到可用为止 library("ggplot2") library("shiny")
slider1
后立即显示plot1
,并使plot2
的微调器保持打开状态,直到可用为止
library("ggplot2")
library("shiny")
library("shinycssloaders")
ui <- fluidPage(
sliderInput("slider1", label = "Slider 1", min = 0, max = 100, step = 1, value = c(0,100)),
withSpinner(plotOutput("plot1")),
withSpinner(plotOutput("plot2"))
)
server <- function(input, output, session) {
output$plot1 <- renderPlot({
ggplot() + geom_point(aes(
x = runif(n = 100, min = 0, max = 100),
y = runif(
n = 100,
min = input$slider1[1],
max = input$slider1[2]
)
))
})
plot2_min <- reactive({
Sys.sleep(time = 2)
input$slider1[1]
})
plot2_max <- reactive({
Sys.sleep(time = 2)
input$slider1[2]
})
output$plot2 <- renderPlot({
ggplot() + geom_point(aes(
x = runif(n = 100, min = 0, max = 100),
y = runif(
n = 100,
min = plot2_min(),
max = plot2_max()
)
))
})
}
shinyApp(ui, server)
库(“ggplot2”)
图书馆(“闪亮”)
图书馆(“shinycssloaders”)
ui根据我的评论,所有的反应式
表达式都会一起处理,并在呈现之前等待所有依赖项,即使您降低了第二个表达式的速度。但是,您可以使用debounce
功能延迟第二次反应,有关更多信息,请参阅此处:
下面的示例将向您展示如何使用它,我将等待2秒:
library(ggplot2)
library(shiny)
library(shinycssloaders)
library(magrittr)
ui <- fluidPage(
sliderInput("slider1", label = "Slider 1", min = 0, max = 100, step = 1, value = c(0,100)),
withSpinner(plotOutput("plot1")),
withSpinner(plotOutput("plot2"))
)
server <- function(input, output, session) {
data1 <- reactive({
data.frame(x = runif(n = 100, min = 0, max = 100),
y = runif(n = 100,min = input$slider1[1],max = input$slider1[2]))
})
output$plot1 <- renderPlot({
ggplot() + geom_point(aes(data1()$x,data1()$y))
})
plot2_min <- eventReactive(data1(),{
input$slider1[1]
})
plot2_max <- eventReactive(data1(),{
input$slider1[2]
})
data2 <- reactive({
data.frame(x = runif(n = 100, min = 0, max = 100),
y = runif(n = 100,min = plot2_min(),max = plot2_max()))
}) %>% debounce(2000)
output$plot2 <- renderPlot({
ggplot() + geom_point(aes(data2()$x,data2()$y))
})
}
shinyApp(ui, server)
库(ggplot2)
图书馆(闪亮)
图书馆(shinycssloaders)
图书馆(magrittr)
ui所有反应都一起处理,并将在呈现之前等待所有依赖项,即使您减慢了第二个,谢谢。这是非常有用的。