计算矩阵均值并跨矩阵进行编译

时间:2018-11-21 15:55:41

标签: r matrix

我只使用R大约一个星期(转换了长时间的SAS用户)。我正在运行一个模型,该模型生成多个相同的矩阵(代表不同的参数方案),类似于下面的简化示例:

    library(matrixStats)
    len<-50
    wid<-10
    mat1 <- matrix(nrow=len, ncol=wid)
    mat2 <- matrix(nrow=len, ncol=wid)
    mat3 <- matrix(nrow=len, ncol=wid)
set.seed(123)    
for (i in 1:wid){
      for (n in 1:len){
        mat1[n,i] <- runif(1)
        mat2[n,i] <- runif(1)
        mat3[n,i] <- runif(1)
    }}

我想分别计算每个矩阵的列总和的平均值和标准偏差,类似于:

a <- colSums(mat1)
mean(a)
sd(a)

对每个矩阵重复一次,然后将这些值编译为具有矩阵标识符,均值和标准差的单个数据集,类似于:

mat1_ID    24.42858    2.198454
mat2_ID    25.67452    1.677669
mat3_ID    24.31933    1.572029

我不知道如何在R中执行此操作。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果您想提高速度,可以尝试一下。我将使用软件包 Rfast 。由于您是R语言的新手,因此我将逐步展示我的示例。

var aspectRatio: AspectRatio = .imax

我将使用您的示例中的矩阵。

install.packages("Rfast") # download package Rfast

您可以根据需要转置矩阵以获得结果

mats <- list(mat1=mat1,mat2=mat2,mat3=mat3) # "mat=mat" store matrix mat and add name
result <- sapply(mats,function(x){
             s <- Rfast::colsums(x) # you can use also the parallel version using argument "parallel"
             c(sd=Rfast::Var(s,std=TRUE),mean=mean(s))
          })

result # this will print the matrix    
      mat1      mat2      mat3
sd    1.677669  1.677669  1.572029
mean 25.674519 25.674519 24.319328

答案 1 :(得分:0)

mats <- paste0("mat", 1:3)
t(sapply(mats, function(x) {
  cs <- colSums(get(x))
  c(mean(cs), sd(cs))
}))

         [,1]     [,2]
mat1 24.42858 2.198454
mat2 25.67452 1.677669
mat3 24.31933 1.572029
相关问题