重复一个复杂的序列并将输出放入R中的新数据帧中

重复一个复杂的序列并将输出放入R中的新数据帧中,r,dataframe,repeat,R,Dataframe,Repeat,我在R相对来说是个新手,我已经工作了一段时间来拼凑一段代码,让我可以比较从一个大数据框中抽取的两个总体的6个变量(由1000倍采样的原始数据组成,并根据pop大小进行替换) 以下是我的数据示例: head(PhenoM2) ID Name PhenoNames Group HML RML FML TML FHD BIB 1 378607 PaleoAleut PaleoAleut 1 323.5 248.75 434.50 355.

我在R相对来说是个新手,我已经工作了一段时间来拼凑一段代码,让我可以比较从一个大数据框中抽取的两个总体的6个变量(由1000倍采样的原始数据组成,并根据pop大小进行替换)

以下是我的数据示例:

head(PhenoM2)
 ID         Name    PhenoNames Group   HML    RML    FML    TML   FHD   BIB
1 378607 PaleoAleut PaleoAleut     1  323.5 248.75 434.50 355.75 46.84  NA
2 378664 PaleoAleut PaleoAleut     1   NA   238.50 441.50 353.00 45.83 277.0
3 378377 PaleoAleut PaleoAleut     1  309.5 227.75 419.00 332.25 46.39 284.0
4 378463 PaleoAleut PaleoAleut     1  283.5 228.75 397.75 331.00 44.37 255.5
5 378602 PaleoAleut PaleoAleut     1  279.5 230.00 393.00 329.50 45.93 265.0
6 378610 PaleoAleut PaleoAleut     1  307.5 234.25 419.50 338.50 43.98 271.5
我的整个代码,从初始重采样循环到输出,如下所示:

samplesM <- ddply(PhenoM2, .(Group),
function(d) d[sample(1:nrow(d), replace = TRUE),])

n <- 1000
samplesM <- vector("list", n)
for (i in seq_along(samplesM)) 
samplesM[[i]] <- ddply(PhenoM2, .(Group),
    function(d) d[sample(1:nrow(d), replace = TRUE),])

all.samplesM <- do.call(rbind, samplesM)

CovDataM <- all.samplesM[,4:10]

covM <- with(CovDataM, by(CovDataM[,2:7], CovDataM$Group, cov, use = "pairwise.complete.obs", method = "pearson"))

cov.aggregator <- function(K){


out <- array(NA,c(6,6,dim(K)))

for(i in 1:dim(K)){

out[,,i] <- K[[i]]

}

return(out)
}


testmatrix<-cov.aggregator(covM)


covM.pooled<-apply(testmatrix,c(1,2), mean, na.rm = T)


male.means<-aggregate(all.samplesM[,4:10], by = list(all.samplesM$"Group"), FUN = mean, na.rm = T)


cov.mstd.aggregator <- function(K,means){


out <- array(NA,c(6,6,dim(K)))

for(i in 1:dim(K)){

mi <- as.matrix(means[i,])
out[,,i] <- K[[i]]/(mi%*%t(mi))

}

return(out)
}


male.P.mstd <- cov.mstd.aggregator(covM,as.matrix(male.means[,3:8]))


covM.mstd.pooled <- apply(male.P.mstd,c(1,2),mean, na.rm = T)

pooledMmean <- apply(male.means[,3:8],2,mean,na.rm=T)

PointHope<-male.means[7,3:8]

Kikuyu<-male.means[128,3:8]

deltaM1<-(PointHope - Kikuyu)/pooledMmean

Pinv <- ginv(covM.mstd.pooled)

B.Kikuyu.PointHope <- Pinv %*% as.matrix(t(deltaM1))
我的问题如下:我需要整个代码重复10次(从最初的1000x循环到输出),但我不确定如何将所有这些笨拙的代码放入常规的for循环或rep()命令中。然后,我需要10次重复中的每一次的输出进入一个空数据帧

我试着在原始代码的末尾添加这个标记以进行重复,但如果没有[,I],每次我(手动)重复它时,它都会简单地重写Kikuyu.PointHope.df,并且使用[,I]我收到一个错误

Kikuyu.PointHope.df[,i] <- do.call(rbind, as.list(B.Kikuyu.PointHope))

Kikuyu.PointHope.df[,i]发表评论作为答案,OP似乎很满意:-)


如果你问的只是如何重复一堆东西,最简单的方法就是将你发布的所有东西捆绑到一个“包装器”函数中,那么你可以做
sapply(1:10,函数(j)my_包装器(你的参数,订阅了第j组数据))

如果你问的只是如何重复一堆东西,最简单的方法是将您发布的所有内容捆绑到一个“包装器”函数中,然后您可以执行
sapply(1:10,函数(j)my_包装器(您的_参数,订阅到第j组数据))
谢谢-一旦我知道如何构建包装器,这肯定会有助于重复!但是输出仍然是矩阵数据的同一列-关于如何在一个数据帧中使其成为一行,我可以继续添加输出,有什么想法吗?对于所有的问题,很抱歉,再次感谢您!啊,没关系。我让它工作了。太完美了,再次谢谢你!
Kikuyu.PointHope.df[,i] <- do.call(rbind, as.list(B.Kikuyu.PointHope))