lapply搭配leveneTest返回不同结果及运行警告问题咨询
两种lapply写法运行逻辑差异与第二种写法失败原因
- 第一种写法逻辑:你自定义的
ht函数接收单个数据框为入参,函数内部直接调用leveneTest执行方差齐性检验,返回检验结果对象。lapply遍历df_list中的每一个数据框,依次传入ht执行,所以最终得到的是每个数据框对应的检验结果列表,符合预期。 - 第二种写法错误核心:你在
leveneTest前加了R中用于创建公式的特殊符号~,这就导致匿名函数的返回值不是leveneTest的执行结果,而是一个未求值的公式对象。你看到的<environment: 0xxxxxxxx>就是公式对象附带的运行环境标识,全程根本没有触发leveneTest的实际运行。
修正后的第二种写法只要删掉~即可正常运行:wood <- lapply(df_list, function(i) leveneTest(y = Height, group = Person, data = i))
第一种写法警告的影响说明
你给出的报错信息实际包含两部分:
- 第一行的
group coerced to factor是leveneTest的正常提示:该函数要求分组变量必须为因子类型,你的Person列是字符型,函数自动完成了类型转换,这个操作完全不影响检验结果的有效性。如果想要消除这个警告,可以在调用检验前手动转换类型,修改ht函数即可:ht <- function(df){ df$Person <- as.factor(df$Person) leveneTest(Height ~ Person, data = df) } - 后续的
Error in cat(...)不属于leveneTest的原生报错,是你环境中额外的代码导致的:比如你手动写了捕获警告并用cat打印的逻辑、或者加载了第三方日志类包修改了警告输出逻辑。正常运行你提供的示例代码只会出现强制转因子的警告,不会触发这个cat报错,该错误和检验结果本身的有效性无关,排查你额外写的调试/日志代码即可解决。
内容的提问来源于stack exchange,提问作者Tyler Ruddenfort
相关产品推荐
相关产品推荐

