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

R Shiny用sliderInput筛选租金数据报逻辑值缺失错误排查

问题定位

触发Error in if: missing value where TRUE/FALSE needed的核心原因:

  • 滑块控件初始值配置不合理:你在UI中将租金滑块的初始值设为100,但从提供的样例数据看,数据集内最低租金为411.5,初始筛选条件Rental Cost` <= 100会返回0行的空sf空间对象。
  • 空对象兼容缺失:tmap的tm_shape接收0行空间数据时,内部渲染逻辑会对空边界框做条件判断,此时传入判断的是NA值,R的if语句仅接受TRUE/FALSE作为判断输入,直接抛出报错。
  • 初始化时序风险:Shiny控件初始化阶段input$RentCost会短暂为NULL,此时执行筛选逻辑会生成无效值,也可能触发同类报错。
修复代码

1. 调整UI滑块配置

不要硬编码滑块范围和初始值,直接绑定数据集的实际租金区间,保证初始加载时筛选结果非空:

# 若数据集是全局加载的,直接在UI中按实际值配置滑块
sliderInput("RentCost", "Rental Cost:",
            min = floor(min(residential_data_sf$`Rental Cost`, na.rm = TRUE)),
            max = ceiling(max(residential_data_sf$`Rental Cost`, na.rm = TRUE)),
            value = median(residential_data_sf$`Rental Cost`, na.rm = TRUE)
)

2. 优化Server端筛选逻辑

加入输入校验和空值过滤,避免无效输入触发异常:

buildingData <- reactive({
  # 等待滑块输入初始化完成再执行后续逻辑
  req(input$RentCost)
  residential_data_sf %>%
    # 先过滤租金列的缺失值,避免NA值导致筛选结果异常
    filter(!is.na(`Rental Cost`), `Rental Cost` <= input$RentCost)
})

3. 给图层渲染加空数据兜底

筛选结果为空时不要直接传入空对象给tmap,增加判断逻辑:

# 放在renderTmap({}) 渲染块内
map_data <- buildingData()
if (nrow(map_data) == 0) {
  # 无匹配数据时返回提示,可根据需求自定义展示样式
  tm_shape(map_data) + tm_text("当前租金区间无匹配公寓", col = "red", size = 1.2)
} else {
  tm_shape(map_data) +
    tm_bubbles(
      col = "Shared Apartment",
      size = "Rental Cost",
      border.col = "black",
      border.lwd = 1
    )
}
可选优化

你数据集中的Shared Apartment、Vacancy列目前存储为字符串格式的"True"/"False",建议在数据预处理阶段转为正式逻辑值,避免tmap做分类映射时出现异常:

residential_data_sf <- residential_data_sf %>%
  mutate(
    `Shared Apartment` = as.logical(`Shared Apartment`),
    Vacancy = as.logical(Vacancy)
  )

内容的提问来源于stack exchange,提问作者Rshiny Learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:09:58