在3D矩阵上产生函数以产生均值和直方图

时间:2019-06-14 15:27:58

标签: r

我有类似的数据:

N = 100
matr <- matrix(rnorm(3*6*N), N)
matr_T <- array(as.vector(t(matr)), dim=c(6, 3, N))

这是模拟的结果。我的专栏代表我的地区,行表示时间单位,然后3d表示每列/每行的估计参数的模拟集。

我想对这个数据集做几件事。我想做一个函数,让我可以在多面板图中为每个列/行的3d数据(这里为18个直方图)制作一个直方图。但是我也想产生一个mean()的数组(2d)和另一个sd()的数组(2d),就像以前的直方图一样(3 * 6的数组)。可以是我可以选择功能的apply()hist()mean()sd()等)。您能帮我吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

编辑号2

现在,它使用远优于lapply的图并以合理的结构进行绘制。

N = 100
matr <- matrix(rnorm(3*6*N), N)
matr_T <- array(as.vector(t(matr)), dim=c(6, 3, N))
apply(matr_T,1:2,mean)


apply(matr_T,1:2,sd)



library(ggplot2) # for histograms


library(cowplot) # for grid arrangement


# create list to access Dimensions in lapply
dims <- list(row = rep(1:nrow(matr_T),each = ncol(matr_T)),
             col = rep(1:ncol(matr_T),times = nrow(matr_T)))

plots <- lapply(seq_along(dims$row),
function(i){ 
  ggplot(data.frame(x = matr_T[dims$row[i],dims$col[i],]),aes(x = x)) + 
    geom_histogram(bins = 10, col = 'black', fill = 'white') +
    theme_minimal() +
    labs(title = paste('row:',dims$row[i],'\n','col:',dims$col[i]))
})

plot_grid(plotlist = plots, ncol = 3)

enter image description here