计算大型数据帧列表的均值和协方差,用lapply替换循环

时间:2017-10-11 13:52:31

标签: r loops dataframe lapply covariance

我之前发布了一个问题,即如何在此链接中创建一组数据帧的所有可能组合或可能数据帧的“功率集”: Creating Dataframes of all Possible Combinations without Repetition of Columns with cbind

我能够创建可能的数据框列表,首先创建数据框名称的所有可能组合,然后将它们存储在ls | perl -e "while(<>){chomp;if(/sr/){rename \$_,$\`.'SR'.$'}}" 中,其中一部分如下所示:

enter image description here

使用Ccolsreduce,然后我按名称调用每个数据框,并将其存储在列表中,然后将列表中的所有列表存储起来以计算均值和协方差:

lapply

然而,由于正在处理大量数据帧并进行ll_cov<- list() ll_ER<- list() for (ii in 2:length(Ccols)){ l_cov<- list() l_ER<- list() for (index in 1:ncol(Ccols[[ii]])){ ls<-list() for (i in 1:length(Ccols[[ii]][,index]) ){ KK<- get(Ccols[[ii]][i,index]) ls[[i]] <-KK } DAT<- transform(Reduce(merge, lapply(ls, function(x) data.frame(x, rn = row.names(x)))), row.names=rn, rn=NULL) l_cov[[index]]<- cov(DAT) l_ER[[index]]<- colMeans(DAT) } ll_cov[[ii]]<- l_cov ll_ER[[ii]]<- l_ER } cov计算,因此循环变得非常耗时。我搜索并遇到了这个示例(Looping over a list of data frames and calculate the correlation coefficient),该示例提到列出数据框,然后将colMeans应用为函数,但它仍然运行得太慢。我尝试通过引入一个cov而不是外部循环来删除其中一个循环:

lapply

但它仍然需要太长时间才能运行(我没有得到结果)。有没有办法用Power_f<- function(X){ l_D<- list() for (index in 2:ncol(X)){ ls<-list() for (i in 1:length(X[,index]) ){ KK<- get(X[i,index]) ls[[i]] <-KK } DAT<- transform(Reduce(merge, lapply(ls, function(x) data.frame(x, rn = row.names(x)))), row.names=rn, rn=NULL) l_D[[index]]<- (DAT) } return(l_D) } lapply(seq(from=2,to=(length(Ccols))), function(i) Power_f(Ccols[[i]])) 替换所有for循环并使其具有计算效率?

0 个答案:

没有答案