我有以下数据:
seed(1)
X <- data.frame(matrix(rnorm(2000), nrow=10))#### the dataset
以下代码创建了1000个自举数据集“x”和1000个自举数据集“y”,每个数据集为5列。
colnums_boot <- replicate(1000,sample.int(200,10))
output<-lapply(1:1000, function(i){
Xprime <- X[,colnums_boot[1:5,i]]
Yprime <- X[,colnums_boot[6:10,i]]
xy <- list(x=Xprime,y=Yprime )
} )
我获得了一个数据框列表“xy”的列表,我想要应用这个特定的代码,但不理解列表索引操作。
从输出“xy”
考虑第一个列表[1]
$x and
$y
我想申请代码:
X= cor($x)
Y= cor($y) separately and then
sapply(1:10, function(row) cor(X[row,], Y[row,]))
这将为列表[1]的每一行“r1”提供一个值。
我想将它应用于整个列表并分别从列表[1],列表[2]中获取r1,r2等等......直到1000并最终将其作为数据帧。最终它将是一个十万维数据框架。
答案 0 :(得分:1)
我找不到我写的那个Xprime,Yprime位的问题;我希望你没有删除它......?如果我没记错的话,我建议这样做,因为处理矩阵要高效得多:
Z <- as.matrix(X)
Xprime2 <- array(,dim=c(10,5,1000))
Yprime2 <- array(,dim=c(10,5,1000))
Xprime2[] <- Z[,colnums_boot[1:5,]]
Yprime2[] <- Z[,colnums_boot[6:10,]]
无论如何,在您的设置中,正如@KarlForner所评论的那样,这将为您提供X和Y列之间的相关性
lapply(output,function(ll) cor(ll$x,ll$y))
这在引导时也可能是低效的,因为您将计算相同200个向量之间的相关性。我认为在前面计算它们cor(X)
更有意义,然后从那里获取值......
至于把它放到data.frame中,我不清楚这意味着什么。