如何计算数据框列表中某些列之间的相关性?

How to calculate correlations between certain columns in a list of dataframes?

我需要从标准正态分布 (X0, X1, X2, ..., X19) 生成 20 个不同的样本 (n=100) 并计算 X0 与所有其他样本 X2...X19 之间的相关性.我知道如何对一个“整个样本”(X0...X19) 执行此操作,但我应该同时对多个 X0...X19 样本执行此操作。我尝试生成一个数据帧列表(每个数据帧包含一个 X0...X19 样本)并对其进行迭代,但由于某种原因失败了。

我的数据是这样的:

dataframes <- replicate(10, as.data.frame(replicate(20, rnorm(100))))

head(dataframes)

#   [,1]        [,2]        [,3]        [,4]        [,5]        [,6]       
#V1 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V2 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V3 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V4 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V5 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V6 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#   [,7]        [,8]        [,9]        [,10]      
#V1 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V2 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V3 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V4 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V5 Numeric,100 Numeric,100 Numeric,100 Numeric,100
#V6 Numeric,100 Numeric,100 Numeric,100 Numeric,100

我试过这样计算相关性:

lapply(frames,
       function(x){
                   cor(x[,1]$V1, x[-c(1:1)])
                   return(x)
                   }
                    ) 

但这导致了一个错误:

Error in x[, 1] : incorrect number of dimensions

我不太熟悉 lapply 或一般的循环,所以我真的需要一些帮助。

您的可重现示例不可重现。一个问题是您的数据不是 data.framelist

class(dataframes) 
[1] "matrix" "array"

此外还有一些容易犯的错误,比如在lapply中返回xx是这里的输入而不是结果)和双子集x。修复这些小错误可以解决您的问题

dataframes <- replicate(10, 
                        as.data.frame(replicate(20, rnorm(100)))
                        simplify = FALSE) # <=== fix
lapply(dataframes, # <=== name corrected
       function(x){
                   cor(x$V1, x[-1]) # no need to subset x before `$V1`
                   # return(x) # <== Remove return x
         }
       )