【发布时间】:2018-01-26 14:03:40
【问题描述】:
我正在尝试在 R 闪亮中创建一个条形图。数据来自 csv 文件,并根据用户在 selectInput 和 sliderInput 控件中的选择进行过滤。
页面加载时出现错误:
plot.window 中的错误:需要有限的“xlim”值。
然后,当页面完全加载时,一切正常且工作正常。 看起来应用程序第一次运行时,我传递给函数 barplot 的 popData 为空。我试图在渲染图之前检查 popData 是否为空,如here 建议的那样,但仍然出现相同的错误。当我对 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)
【问题讨论】: