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

Shiny应用中无法从输入数据集筛选区分字符与数值型变量

Shiny字段自动分类功能报错修复

报错原因

  • 触发时机问题:应用刚启动、用户未上传文件时,data_set()返回值为NULL,observe未做空值校验直接执行后续逻辑,导致对NULL对象调用数据框方法时报错
  • 逻辑使用错误:dplyr::select_if()是针对数据框对象的列筛选函数,代码中误将列名字符串向量dsnames传入调用,不符合函数参数要求
  • 变量名拼写错误:代码中先定义了di_option,后续赋值时错写为di_options,会导致后续赋值无效

修复要点

  • 在observe开头做空值判断,数据集为NULL时直接终止执行
  • 调整类型判断逻辑,直接对数据框本身做列类型筛选,再提取对应列名
  • 修正拼写错误的变量名

修复后完整代码

server <- function(input, output,session){
  data_set <- reactive({
    inFile <- input$InputFile
    if (is.null(inFile))
      return(NULL)
    read.csv(inFile$datapath, header=input$header)
  })

  observe({
    # 空值校验,无数据集时直接终止执行
    req(data_set())
    df <- data_set()
    # 对数据框筛选对应类型的列后提取列名
    dim <- df %>% select_if(is.character) %>% names()
    measure <- df %>% select_if(Negate(is.character)) %>% names()

    di_options <- list()
    di_options[dim] <- dim

    me_options <-list()
    me_options[measure] <- measure

    updateRadioButtons(session, "xaxisGrp",
                       label = "维度",
                       choices = di_options,
                       selected = "")
    updateRadioButtons(session, "yaxisGrp",
                       label = "度量",
                       choices = me_options,
                       selected = "")
  })
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:54:09