RStudio中cld()函数报错:无适用于emm_list类对象的方法
解决
cld()函数适配emm_list对象的报错问题 问题原因
你遇到的Error in UseMethod("cld") : no applicable method for 'cld' applied to an object of class "c('emm_list', 'list')"报错,是因为res.lm1 <- lsmeans(lm1, pairwise ~ distance, adjust="tukey")返回的是包含lsmeans均值结果和Tukey两两比较结果的复合列表,而cld()函数只能直接处理单独的lsmeans/emmmeans对象,无法识别这种列表类型。
修正步骤
- 提取单独的lsmeans对象:从
res.lm1中取出均值部分(列表的第一个元素),再传入cld()函数。 - 优化ggplot文本映射:
res.CLD中已包含distance列,无需用res.CLD$x,直接映射x=distance即可。
修正后的完整代码
require(multcomp) require(ggpubr) require(multcompView) require(car) require(ggplot2) require(lsmeans) require(emmeans) M <- read.csv("C:\\Users\\pauli\\Documents\\ISARA 5A\\MFE\\R\\Matrices\\Matrice moisson .csv", sep = ";", dec= ",") MC <- M[M$parcelle=="Charignon ", ] MC$distance <- factor(MC$distance, levels=c("1H","2H","6H","12H","15H")) lm1 <- lm(prot~distance, data=MC) # 保留lsmeans和两两比较结果,后续仅取均值部分给cld() res.lm1 <- lsmeans(lm1, pairwise ~ distance, adjust="tukey") summary(res.lm1) # 提取lsmeans对象生成分组字母 res.CLD <- cld(res.lm1$lsmeans, alpha=0.05, Letters=letters) res.CLD <- res.CLD[res.CLD$.group!='',] a <- ggplot(data=MC, aes(x=distance, y=prot, col=distance))+ scale_color_brewer(palette = "Dark2")+ scale_alpha(0.5)+ geom_jitter(position = position_jitterdodge(jitter.width = 0), size = 1.5)+ ylim(0, max(MC$prot)) + stat_summary(fun.data=mean_sd, size=0.2, col="black")+ labs(title = "Parcelle blé dur - CHA", x= "Distance", y="Taux de protéines (%)")+ theme(legend.position = "none")+ # 直接用res.CLD的distance列映射x轴 geom_text(data = res.CLD, aes(x=distance, y =10, label=.group), col="black" ,vjust=0, size=5) a
简化写法(若无需保留两两比较结果)
如果后续不需要用到Tukey两两比较的结果,可以直接只生成lsmeans对象,省略pairwise参数:
res.lm1 <- lsmeans(lm1, ~ distance, adjust="tukey") res.CLD <- cld(res.lm1, alpha=0.05, Letters=letters)
内容的提问来源于stack exchange,提问作者Pauline Lefranc
相关产品推荐
相关产品推荐

