【问题标题】:Make a function on a 3D matrix to produce means and histograms在 3D 矩阵上创建函数以生成均值和直方图
【发布时间】:2019-06-14 15:27:58
【问题描述】:

我有这样的数据:

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

这是模拟的结果。我的列代表我的领土,行代表时间单位,3d 代表每列/行的估计参数的模拟集。

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

谢谢!

【问题讨论】:

  • 那么,正如我可以理解的那样,您想要有 18 个直方图和两个 6*3 矩阵,一个带有均值,一个带有 sds?
  • 是的,我想要一个上面的直方图与列*行一样多的图(第三维数据的直方图,是参数的模拟),还有两个二维表第三维的均值和sd数据。我想也许是一个可以选择 hist 或 mean 或 sd 的函数。但也许有更简单的解决方案!谢谢!
  • 好的,那么this 可能会帮助您解决平均值/标准偏差。我会试着弄清楚直方图的事情。

标签: r


【解决方案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)

【讨论】:

  • 谢谢它就是这样工作的!是否可以自动为以下类型的图形添加名称:[1,1]、[1,2]、[1,3] 或类似的东西以区分它们?谢谢!
  • 我不确定我是否理解,你的函数已经调换了直方图的顺序?
  • 不,我不得不转置结果矩阵,因为 plot_grid 以奇怪的顺序绘制它们。但我会改变它,这样你就可以将你的职位作为名字。
猜你喜欢
  • 2019-08-16
  • 2019-05-04
  • 2014-05-17
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
  • 1970-01-01
相关资源
最近更新 更多