我正在尝试在R闪亮中创建一个条形图。数据来自csv文件,并根据用户在selectInput
和sliderInput
控件中的选择进行过滤。
当页面加载时,我收到错误:
plot.window中的错误:需要有限的' xlim'值。
然后,当页面完全加载时,一切正常并正常工作。 看起来第一次app运行,我传递给函数barplot的popData为null。在渲染绘图之前,我试图检查popData是否为建议here的null,但仍然得到相同的错误。当我使用selectedCountry和selectedYear的硬编码值而不是反应式表达式时,它可以正常工作,我没有得到这个初始错误是什么让我认为当第一次渲染绘图时,selectInput和sliderInput的结果可能还不可用(?) 我怎样才能解决这个问题?感谢。
ui <- fluidPage(
titlePanel(title = h3("Population by age")),
sidebarLayout(
sidebarPanel(
uiOutput("geoSelector"),
br(),
uiOutput("yearSlider"),
br()
),
mainPanel(
plotOutput("barChart"),
br()
))
)
server <- function(input, output) {
data <- read.csv("data.csv")
geo = sort(unique(data[,"GeographyName"]))
output$geoSelector <- renderUI({
selectInput("country", "Select country", as.list(geo))
})
minY <- min(unique(data[,"PeriodValue"]))
maxY <- max(unique(data[,"PeriodValue"]))
output$yearSlider <- renderUI({
sliderInput("year", "Select year", min=minY, max=maxY,
value=as.integer(format(Sys.Date(), "%Y")), sep="", animate = TRUE, step=1)
})
selectedCountry <- reactive({input$country})
selectedYear <- reactive({input$year})
selectedData <- reactive({subset(data, GeographyName == selectedCountry() &
PeriodValue == selectedYear())})
selectedDataSorted <- reactive({selectedData()[order(selectedData()$AgeCategoryId),c(1:8)]})
popData <- reactive({selectedDataSorted()$DataPoint})
categ <- reactive({selectedDataSorted()$AgeCategory})
output$barChart <- renderPlot({
barplot(popData(),names.arg=categ(), cex.names = 0.7, border=NA,
xlab="Age Category", ylab="Population (m)")
})
}
shinyApp(ui = ui, server = server)
答案 0 :(得分:0)
这会解决您的问题吗?
output$barChart <- renderPlot({
validate(need(nrow(popData())>0, "Please select a data set"))
barplot(popData(),names.arg=categ(), cex.names = 0.7, border=NA,
xlab="Age Category", ylab="Population (m)")
})