Shiny应用中散点图添加相关系数报缺失值错误求解
问题排查与解决方案
错误原因
你的代码在计算皮尔逊相关系数的部分存在3处核心错误,直接触发报错:
dplyr::select()用法错误:不能在select内部直接使用as.numeric()和!!!操作符处理单变量输入,select的作用是选择列而非转换数据类型,!!!用于批量注入多个表达式,此处完全不需要。- 数据类型错误:你筛选后得到的x、y是数据框结构,而
cor()函数要求输入向量才能正确计算两个变量的相关系数。 - 缺失值处理参数错误:
cor()的缺失值控制参数是use而非na.rm,你传的na.rm = T对cor无效。
修正方案
直接替换你原来output$correlation的代码即可,修正后的代码如下:
output$correlation <- renderText({ # 先按国家筛选数据,避免重复筛选 df_filtered <- subset(covid, location == input$location) # 提取两个变量为向量,同时转数值类型 x <- as.numeric(df_filtered[[input$x]]) y <- as.numeric(df_filtered[[input$y]]) # 计算皮尔逊相关系数,指定用完整观测值计算自动过滤缺失值 cor_val <- cor(x, y, method = "pearson", use = "complete.obs") # 格式化输出结果 paste0("所选变量的皮尔逊相关系数为:", round(cor_val, 4)) })
额外优化建议
如果要避免初始加载时因为输入未完成触发临时报错,可以给renderText加req判断:
output$correlation <- renderText({ # 确保所有输入都已加载完成再运行后续代码 req(input$location, input$x, input$y) df_filtered <- subset(covid, location == input$location) x <- as.numeric(df_filtered[[input$x]]) y <- as.numeric(df_filtered[[input$y]]) cor_val <- cor(x, y, method = "pearson", use = "complete.obs") paste0("所选变量的皮尔逊相关系数为:", round(cor_val, 4)) })
内容的提问来源于stack exchange,提问作者Hari Chandana Bollimpalli
相关产品推荐
相关产品推荐

