R语言使用循环执行Grubbs' test无输出问题求助
问题原因
- R 默认不会自动打印循环内部的函数返回值:只有直接在控制台/脚本顶层运行
grubbs.test()时,才会自动触发打印逻辑,放在 for/while 循环内部的调用只会计算结果,不会主动输出到控制台或者 R Markdown 的渲染结果里。 - R Markdown 的代码块输出逻辑也遵循该规则,循环内的对象必须显式调用
print()才会被捕获作为输出内容。
解决方法
你只需要给循环内的grubbs.test()调用套上print()函数即可,修改后的 for 循环示例如下:
library(outliers) # 先加载 grubbs.test 所在的 outliers 包 data(heptathlon) # 加载对应数据集 for (i in 1:ncol(heptathlon)) { # 显式打印检验结果 print(grubbs.test(heptathlon[ ,i], type = 10, opposite = FALSE, two.sided = FALSE)) # 可选:添加分割标识方便区分不同列的结果 cat("--- 第",i,"列检验结束 ---\n") }
如果需要把结果存下来后续分析,也可以用列表存储所有检验结果:
# 初始化结果列表,列名对应为数据框的字段名 grubbs_res <- vector("list", ncol(heptathlon)) names(grubbs_res) <- colnames(heptathlon) for (i in 1:ncol(heptathlon)) { grubbs_res[[i]] <- grubbs.test(heptathlon[ ,i], type = 10, opposite = FALSE, two.sided = FALSE) } # 后续需要查看某一列的结果直接调用即可,比如查看 hurdles 列的检验结果 print(grubbs_res[["hurdles"]])
也可以用更符合 R 语言风格的 lapply 实现批量计算,写法更简洁:
grubbs_res <- lapply(heptathlon, function(col) { grubbs.test(col, type = 10, opposite = FALSE, two.sided = FALSE) }) # 打印所有列的检验结果 print(grubbs_res)
内容的提问来源于stack exchange,提问作者js2822
相关产品推荐
相关产品推荐

