R Shiny计算统计量报错“首个参数必须为数值类型”问题求助
错误原因
effsize包的cohen.d()函数要求传入两个数值向量作为比较对象,你当前代码传入的是group_1、group_2两个完整dataframe,包含字符型的军团、士气字段,自然会触发「参数不是数值类型」的报错,不存在被存储为HTML格式的问题,属于传参类型不匹配。- 分组变量(Moral)和待比较的数值变量(Casualties)的逻辑没有拆分清楚,没有指定要计算差异的数值列。
- 输出配置不匹配:
cohen.d()返回的是结果列表,你用renderTable渲染不符合输出要求,和前端的verbatimTextOutput也不匹配。
修正方法
你只需要修改cohensd响应式函数和对应输出逻辑即可,核心是提取待比较的数值列(也就是你选的num_var_2对应列),修正后代码片段如下:
cohensd <- eventReactive(input$run_button,{ req(input$factor, input$num_var_1, input$num_var_2, data_input()) # 筛选指定军团的数据集 if (!is.null(input$selected_factors)) { df <- data_input()[data_input()[[input$factor]] %in% input$selected_factors,] } else { df <- data_input() } # 拆分分组,仅提取待比较的数值列(运行时num_var_2选择Casualties即可) group_1_val <- df[df[[input$num_var_1]] %in% input$selected_group, input$num_var_2] group_2_val <- df[!(df[[input$num_var_1]] %in% input$selected_group), input$num_var_2] # 计算cohen d cohen.d(group_1_val, group_2_val) }) # 把renderTable改成renderPrint,匹配verbatimTextOutput output$cohensd <- renderPrint(cohensd())
如果需要补充Wilcox检验,逻辑完全一致,只需要增加以下代码即可:
wilcoxt <- eventReactive(input$run_button,{ req(input$factor, input$num_var_1, input$num_var_2, data_input()) if (!is.null(input$selected_factors)) { df <- data_input()[data_input()[[input$factor]] %in% input$selected_factors,] } else { df <- data_input() } group_1_val <- df[df[[input$num_var_1]] %in% input$selected_group, input$num_var_2] group_2_val <- df[!(df[[input$num_var_1]] %in% input$selected_group), input$num_var_2] wilcox.test(group_1_val, group_2_val) }) output$wilcoxt <- renderPrint(wilcoxt())
操作注意事项
运行时按以下顺序选择参数即可得到正确结果:
- 「Select factor」选择
Legion,然后在弹出的多选框里选择你要统计的军团 - 「Variable X axis」选择
Moral作为分组变量 - 「Variable Y axis」选择
Casualties作为待比较的数值变量 - 「Select group for statistics」选择
High作为对比基准组 - 点击运行即可得到高士气和中低士气组的伤亡数统计结果
内容的提问来源于stack exchange,提问作者PassaroBagante
相关产品推荐
相关产品推荐

