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
相关产品推荐
相关产品推荐

