R语言遍历两数据集逐列统计对比 lapply语法问题求助
问题原因
lapply仅支持遍历单个列表/向量,无法同时传入两个列表逐对应位置调用函数,你的需求需要使用多变量迭代函数mapply实现- 原代码中
lapply的参数传递顺序错误,第二个参数应为待调用的函数,你错误将postdat传到了函数参数位,导致语法报错
修正后的代码
### predat and postdat are the datasets to be compared columnwise predat <- as.data.frame(matrix(data = rnorm(25), nrow = 25, ncol = 5)) postdat <- as.data.frame(matrix(data = rnorm(25), nrow = 25, ncol = 5)) colnames(predat) <- c("x1","x2","x3","x4","x5") colnames(postdat) <- c("y1","y2","y3","y4","y5") test_out <- function(x,y){ res <- wilcox.test(x,y, paired = TRUE, alternative = "two.sided") return(res) } ## 用mapply同时遍历两个数据集的列,逐列传入test_out计算 out_all <- mapply(test_out, predat, postdat, SIMPLIFY = FALSE)
补充说明
mapply的参数顺序为:待调用函数、第一个遍历对象、第二个遍历对象- 加
SIMPLIFY = FALSE参数可以强制返回结果为列表格式,和你预期的输出结构一致,如果不加会默认尝试把结果简化为矩阵 - 你也可以不用提前把data.frame转成list,data.frame本身就是按列存储的列表结构,直接传入mapply即可生效
如果需要提取所有检验的p值整理成表格,可以用下面的代码:
p_df <- data.frame( compare_pair = paste(colnames(predat), colnames(postdat), sep = " vs "), p_value = sapply(out_all, function(x) x$p.value) )
内容的提问来源于stack exchange,提问作者user2450223
相关产品推荐
相关产品推荐

