如何用R包bestnormalize标准化数据?及标准化后直方图绘制报错解决
问题解决
错误原因
- 调用
boxcox时未指定数据框,R无法识别flipper_length_mm变量 bestNormalize系列函数返回的是包含标准化逻辑的对象,不是直接的数值向量,直接传入hist会因类型不匹配报错
修正后的代码示例
方式1:提取对象中的转换后数值
library(bestnormalize) data(penguins, package = "palmerpenguins") ppp <- penguins # 先清理缺失值(原数据集存在NA,会导致标准化失败) ppp_clean <- na.omit(ppp) # 执行Box-Cox标准化并提取转换后的数值向量 bc_obj <- boxcox(ppp_clean$flipper_length_mm) newflip <- bc_obj$x.t hist(newflip, main = "Box-Cox标准化后的鳍肢长度直方图", xlab = "标准化鳍肢长度") # 如果用orderNorm标准化,同样提取x.t字段 on_obj <- orderNorm(ppp_clean$flipper_length_mm) newflip_on <- on_obj$x.t hist(newflip_on, main = "OrderNorm标准化后的鳍肢长度直方图", xlab = "标准化鳍肢长度")
方式2:用predict函数生成转换后的值
# 用predict函数获取标准化结果(适合后续对新数据做相同转换的场景) newflip_predict <- predict(bc_obj, newdata = ppp_clean$flipper_length_mm) hist(newflip_predict)
额外注意事项
- 原
penguins数据集中flipper_length_mm存在缺失值,必须先用na.omit()清理,否则标准化函数会报错 bestNormalize包的所有标准化函数返回的对象,都通过x.t字段存储转换后的数值;predict()方法则可以基于已训练的标准化规则,对新数据做一致转换
内容的提问来源于stack exchange,提问作者mayur wabhitkar
相关产品推荐
相关产品推荐

