我只使用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中执行此操作。任何帮助将不胜感激。
答案 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