R Shiny - 在第一次渲染时生成 observeEvent 图但有 "req" 语句
RShiny - Generating observeEvent plot on first render BUT have "req" statement
我有一个情节,每次按下操作按钮时都会自行刷新。我希望在第一次渲染时显示该图,即。当用户第一次导航到该页面时。目前必须在显示图之前按下操作按钮。
但是,ignoreNULL 在这里不起作用。我有一个 req 语句,出于某种原因否定了 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)
有办法解决吗?注释掉 req 语句可能很诱人,但对于实际的应用程序(不是这个例子),我必须拥有它,否则图表将 运行 出现错误问题,例如“参数长度为零”。
谢谢
也许您可以在按下操作按钮之前使用 non-reactive data.table,如下所示。
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()
})
}
我有一个情节,每次按下操作按钮时都会自行刷新。我希望在第一次渲染时显示该图,即。当用户第一次导航到该页面时。目前必须在显示图之前按下操作按钮。
但是,ignoreNULL 在这里不起作用。我有一个 req 语句,出于某种原因否定了 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)
有办法解决吗?注释掉 req 语句可能很诱人,但对于实际的应用程序(不是这个例子),我必须拥有它,否则图表将 运行 出现错误问题,例如“参数长度为零”。
谢谢
也许您可以在按下操作按钮之前使用 non-reactive data.table,如下所示。
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()
})
}