使用lapply处理emm_list对象时丢失元素类的问题
emmeans包中emm_list对象使用lapply获取元素类的异常问题
问题现象
有一个对象列表tmp,单独遍历打印每个元素的类时,结果显示所有元素都是emmeans包的emmGrid类:
> for (i in 1:2) print(class(tmp[[i]])) [1] "emmGrid" attr(,"package") [1] "emmeans" [1] "emmGrid" attr(,"package") [1] "emmeans"
但使用lapply(tmp, class)获取元素类时,返回结果却显示元素类为list:
> lapply(tmp, class) $emmeans [1] "list" $contrasts [1] "list"
原因分析
经排查,该异常与tmp的类直接相关:tmp的类为emm_list,同时继承自list类型:
> class(tmp) [1] "emm_list" "list"
emm_list类对lapply的处理逻辑做了重载,导致直接调用lapply时无法正确识别元素的原始类。
解决方法
将tmp转为纯list类型后,再使用lapply即可正常获取元素的emmGrid类:
> t2 <- tmp > class(t2) <- "list" > lapply(t2, class) $emmeans [1] "emmGrid" attr(,"package") [1] "emmeans" $contrasts [1] "emmGrid" attr(,"package") [1] "emmeans"
复现代码
library(emmeans) pigs.lm <- lm(conc ~ source + factor(percent), data = pigs) tmp <- emmeans(pigs.lm, pairwise ~ source)
内容的提问来源于stack exchange,提问作者Russ Lenth
相关产品推荐
相关产品推荐

