如何在R语言中对listofdfs列表的每个元素运行自定义函数
批量计算多组数据的列均值差
一、自定义列均值差计算函数
已编写MYCV函数,用于计算两组数据的列均值之差,函数内部通过嵌套子函数实现核心计算逻辑:
MYCV=function(x1,x2){ # 计算列均值差 meandiff1=function(x1,x2){ mean1=colMeans(x1) mean2=colMeans(x2) beza=mean1-mean2 return(beza) } bezamean=meandiff1(x1,x2) }
二、模拟生成多组数据集
借助mvtnorm包生成5组包含x1和x2的多元正态分布数据集,最终存储在listofdfs列表中:
# 模拟多元随机数据参数设置 a=0 variance=1 g1=5 g2=5 mn=0 covar=matrix(c(variance,a,a,a,variance,a,a,a,variance),ncol=3) # 生成5组模拟数据 k = 5 library(mvtnorm) set.seed(123) listofdfs <- list() for (i in 1:k){ x1 = rmvnorm(n=g1,mean=c(mn,mn,0),sigma=covar) x2 = rmvnorm(n=g2,mean=c(mn,mn,0),sigma=covar) data = list(x1=x1,x2=x2) listofdfs[[i]]=data }
三、批量运行函数获取结果
listofdfs的每个元素都是包含x1和x2的子列表,可使用lapply遍历列表,对每组数据调用MYCV函数:
# 批量计算每组数据的列均值差 results <- lapply(listofdfs, function(df) { MYCV(df$x1, df$x2) }) # 查看结果 results
运行后results列表将存储5组数据对应的列均值差结果,每组结果为长度3的向量(对应3列数据的均值差)。
内容的提问来源于stack exchange,提问作者Norin
相关产品推荐
相关产品推荐

