我之前发布了一个问题,即如何在此链接中创建一组数据帧的所有可能组合或可能数据帧的“功率集”: Creating Dataframes of all Possible Combinations without Repetition of Columns with cbind
我能够创建可能的数据框列表,首先创建数据框名称的所有可能组合,然后将它们存储在ls | perl -e "while(<>){chomp;if(/sr/){rename \$_,$\`.'SR'.$'}}"
中,其中一部分如下所示:
使用Ccols
和reduce
,然后我按名称调用每个数据框,并将其存储在列表中,然后将列表中的所有列表存储起来以计算均值和协方差:
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
循环并使其具有计算效率?