2013-09-23 18 views
0

的列表,我有以下数据:施加函数dataframes

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) 
}) 

我得到的dataframes“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

只是'lapply'在你的输出列表上的一个函数(l),你可以在其中使用l $ x和l $ y。 –

+1

在单个矢量上询问“cor”是没有意义的。请编辑您的问题,以便统计数据合理。 –

回答

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中,我不清楚它意味着什么。