我从 J. Cheng 那里找到了这段代码作为 freezeReactiveValue 的示例。但是,在显示绘图之前,有时会暂时显示错误以代替绘图。(需要对输入进行一些更改才能获得此结果。)据我了解,问题是在短时间内 - X 和 Y(列)保留在前一个数据集上,并且不匹配新的数据集。例如,我在选择“压力”数据集后一秒钟收到错误消息“FUN 中的错误:找不到对象'速度'”。(但前提是事先使用 x=Speed 和 y=pressure 选择了“汽车”数据集。)显然,该图试图在有机会更新之前获取 x 变量,但我不知道如何防止这种情况发生正在发生。将不胜感激你有任何提示!!!谢谢!
library(shiny)
library(ggplot2)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("dataset", "Dataset", c("cars", "pressure", "mtcars")),
selectInput("x", "x variable", character(0)),
selectInput("y", "y variable", character(0))
),
mainPanel(
plotOutput("plot")
)
)
)
server <- function(input, output, session) {
dataset <- reactive({
get(input$dataset, "package:datasets")
})
observe({
freezeReactiveValue(input, "x")
freezeReactiveValue(input, "y")
columns <- names(dataset())
updateSelectInput(session, "x", choices = columns, selected = columns[[1]])
updateSelectInput(session, "y", choices = columns, selected = columns[[2]])
})
output$plot <- renderPlot({
Sys.sleep(2)
req(input$dataset,input$x,input$y)
ggplot(dataset(), aes_string(input$x, input$y)) + geom_point()
})
}
shinyApp(ui, server)