这是一个简单的应用来说明我的问题。当我使用selectizeInput而未指定默认值时,主面板只显示错误消息。如果没有选择,我需要的是一个空图。如何修改我的代码?
library(shiny)
library(datasets)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectizeInput('var', 'choose variable',
choices = names(mtcars),
options = list(
placeholder = 'Please select an option below',
onInitialize = I('function() { this.setValue(""); }'))
)
),
mainPanel(
plotOutput('hist')
)
)
)
server <- function(input, output) {
output$hist <- renderPlot ({
hist (eval(parse(text=(paste0('mtcars$', input$var)))))
})
}
shinyApp(ui, server)
答案 0 :(得分:1)
如果在selectizeInput
中未选择任何内容,则输入的值为""
,因此您在字符串eval(parse())
上调用mtcars$
,这是错误的语法。您不应该使用eval(parse())
,而是在尝试绘制直方图之前验证输入值,例如在您的服务器中:
output$hist <- renderPlot ({
validate(need(input$var, 'Choose a variable!'))
hist(x = mtcars[[input$var]])
})
如果您不想显示消息,则可以在致电req(input$var)
之前执行hist
。