如何在数组列表中的行上应用函数

时间:2013-07-12 19:36:33

标签: r list multidimensional-array

尽管与几个人讨论过这个问题,但我还是无法解决我的问题,所以希望这里的社区可以提供帮助。

数据存储为数组列表。列表中的每个组件表示按特定因子分组的数据。阵列有三个维度。第一维表示时间,第二维表示成分的数量,第三维表示数据点。因此,在下面的示例数据中,每个成分(第二维)每个时间单位(第一维)有三个数据点(第三维)。

第一维和第三维有一个固定的nrow(时间)和ncol(数据点),而第二个维度因每个组(列表中的组件)而异,我将数组存储在列表中。

所以数据结构如下。

data.list <- vector("list", 3) 

numb <- c(2,3,4)

data.list[[1]] <- array(1:(numb[1] * 5 * 3), dim = c(5, numb[1], 3))
data.list[[2]] <- array(1:(numb[2] * 5 * 3), dim = c(5, numb[2], 3))
data.list[[3]] <- array(1:(numb[3] * 5 * 3), dim = c(5, numb[3], 3))

如果我想计算第1组中所有成分的第一个数据点的平均值(假设它没有存储在列表中),我会这样做:

apply(array[,, "data.point.1"], 1, mean)

现在我想在所有组(列表中的组件)和组件(数组中的第二维)上应用平均值(时间) - 但我找不到解决方案。

我试图使用sapply,因为基本上我想得到一个向量作为输出,其长度对应于数组的nrow(本质上是此问题中的时间段数)。但是,sapply会在每个组件上应用一个函数,并返回一个带有列表长度的向量(至少这对我来说是这样)。

有人能看到解决这个问题的好方法吗?

如果没有,那么根本问题是,数据可能以错误的方式存储在我想要的计算类型中吗?

1 个答案:

答案 0 :(得分:0)

我仍然不理解OP,但这会概括并略微简化评论中的公式:

rowMeans(do.call(cbind, lapply(data.list, function(x) x[,,1])))