You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R Shiny选择单选按钮绘图时出现object not found错误如何解决

问题诊断
  • 硬编码列名不可靠:dataRetrieval返回的径流列名由参数Cd和统计Cd拼接生成,部分USGS站点未上报日最大值(statCd=00002)的径流数据,返回结果中不存在X_00060_00002列,直接调用就会报错
  • 缺少数据有效性校验:未判断readNWISdv返回结果是否符合预期,空数据或无目标列时直接绘图会抛出变量不存在的错误
  • 数据请求冗余:每次渲染绘图都同时拉取均值、最大值两份数据,不仅效率低,还可能因为频繁请求触发USGS接口访问限制
修复后完整代码
require(shiny)
require(dataRetrieval)
require(lubridate)
require(ggplot2)

ui = fluidPage(
  selectInput(inputId = "usgs_site", 
              label = "select usgs site", 
              choices = c("Colorado below Glenwood" = "09085100", 
                          "Colorado near Cameo" = "09095500",
                          "Colorado near Utah" = "09163500")),
  # 单选值直接对应statCd,减少后续映射逻辑
  radioButtons(inputId = "stat_type", 
               label = "Choose Mean or Max", 
               choices = c("Mean" = "00003", "Max" = "00002")),
  plotOutput(outputId = "timeseries")
)

server = function(input, output){
  output$timeseries = renderPlot({
    # 仅拉取当前选择的统计类型数据,减少冗余请求
    river_data = readNWISdv(siteNumbers = input$usgs_site, 
                            parameterCd = "00060", 
                            statCd = input$stat_type,
                            startDate = "", endDate = "")
    river_data$Date = ymd(river_data$Date)
    # 动态生成目标列名,避免硬编码失效
    target_col = paste0("X_00060_", input$stat_type)
    
    # 校验目标列是否存在,不存在则输出提示
    if(target_col %in% colnames(river_data)){
      plot(river_data[[target_col]] ~ Date, 
           data = river_data, 
           type = "l", 
           ylab = "Discharge, cfs", 
           xlab = "Year", 
           col = "blue")
    }else{
      # 无数据时绘制提示文本
      plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")
      text(1, 1, "当前站点暂无该统计类型的径流数据", cex = 1.5)
    }
  }) 
}

shinyApp(ui = ui, server = server)
关键修改说明
  • 单选按钮取值直接对应USGS的统计编码,无需额外做值映射,减少逻辑出错概率
  • 按用户选择仅拉取对应统计类型的数据,降低请求频次和出错可能
  • 动态生成目标列名,适配不同统计类型的返回结果
  • 增加数据有效性校验,无对应数据时友好提示而非抛出错误

内容的提问来源于stack exchange,提问作者Maggie Perry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:36:04