mids类多重插补数据集多变量密度图绘制报错排查
解决mice多重插补数据集密度图绘制的报错问题
嘿,我来帮你搞定这个报错!你遇到的Error in [.data.frame(r, , xvar) : undefined columns selected,问题出在densityplot对公式参数的解析上。当你用~vars[[x]]的时候,函数会误以为你要找一个叫vars[[x]]的列,但你的插补数据集里根本没有这个列,自然就报错啦。
给你两种简单的解决办法,随便选一种都能正常出图:
方法一:动态构造公式字符串
直接把变量名拼接成densityplot能识别的公式格式,再转成公式对象就行:
library(mice) library(purrr) # 生成插补数据集 imp <- mice(airquality, seed = 123, m = 3, print = FALSE) vars <- c('Ozone', 'Solar.R') # 循环绘制每个变量的密度图 map(vars, function(var) { # 拼接成~变量名的公式字符串,再转成公式对象 densityplot(imp, as.formula(paste0("~", var))) })
方法二:用tidyverse风格的符号注入(更优雅)
如果你平时常用tidyverse工具,可以用rlang包的符号转换功能,让代码更简洁:
library(mice) library(purrr) library(rlang) imp <- mice(airquality, seed = 123, m = 3, print = FALSE) vars <- c('Ozone', 'Solar.R') map(vars, function(var) { # 把字符串转成符号,再用!!注入到公式里 densityplot(imp, ~!!sym(var)) })
另外偷偷说一句:其实densityplot支持一次性绘制多个变量的密度图,不用写循环也能搞定,代码更简单:
densityplot(imp, ~Ozone + Solar.R)
这样每个变量的不同插补结果会用不同颜色区分,对比起来更直观哦!
内容的提问来源于stack exchange,提问作者Kelsey
相关产品推荐
相关产品推荐

