我有一个每次按下动作按钮都会刷新的情节。我想在第一次渲染时显示的情节,即。当用户第一次导航到页面时。目前必须按下动作按钮才能显示绘图。
然而,ignoreNULL在这里不起作用。我有一个请求语句,由于某种原因否定了ignoreNULL的效果。下面我有一个简单的可重复的调试示例。
library(shiny)
library(data.table)
library(ggplot2)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
uiOutput('inin'),
actionButton(inputId = "trigger",
label = "Trigger",
icon = icon("refresh"))
),
mainPanel(
plotOutput("outTable")
)
)
)
server <- function(input, output){
output$inin = renderUI(selectInput(inputId = 'ins', label='hi', choices=c('x','y')))
re <- eventReactive(input$trigger, {
req(input$ins) # This is absolutely required for my app
a = data.table(x = c("a", "b"), y = round(runif(2),2))
return(a)
}, ignoreNULL = F)
output$outTable <- renderPlot({
ggplot(re(), aes(x=y)) + geom_histogram()
})
}
shinyApp(ui, server)
有办法解决这个问题吗?注释掉请求语句可能很诱人,但对于实际的应用程序(不是这个例子),我必须有它,否则图形将遇到诸如"参数长度为零"等错误的问题。
感谢也许您可以使用非响应性数据。
在按下操作按钮之前,请按下下面的表。server <- function(input, output){
output$inin = renderUI(selectInput(inputId = 'ins', label='hi', choices=c('x','y')))
re1 <- data.table(x = c("a", "b"), y = round(runif(2),2))
re <- eventReactive(input$trigger, {
req(input$ins) # This is absolutely required for my app
a = data.table(x = c("a", "b"), y = round(runif(2),2))
return(a)
}, ignoreNULL = F)
output$outTable <- renderPlot({
if (input$trigger==0) df <- re1
else df <- re()
ggplot(df, aes(x=y)) + geom_histogram()
})
}