两个数据帧/矩阵的所有行之间的逐元素向量乘法

Elementwise vector multiplication between all rows of two data frames / matrices

我有一组模型,需要在不同的估计量级别为每个模型生成生存估计值。我首先要创建我将平均的模型。

在这里,模型集由一个矩阵表示,其中列是在特定模型中可能会或可能不会找到的效果, 行是单个模型,单元格值 (1/0) 打开或关闭值。

modset <- structure(list(A = c(1, 1), B = c(1, 1), C = c(1, 1), D = c(1, 
1), E = c(0, 1), F = c(1, 0)), .Names = c("A", "B", "C", "D", 
"E", "F"), row.names = c(2L, 4L), class = "data.frame")

我还创建了一个矩阵,它提供了我需要 运行 每个模型所需的值。

estvals <- structure(list(int = c(1L, 1L, 1L, 1L), age = c(6L, 18L, 6L, 
18L), species = c(1L, 1L, 0L, 0L), Time = c(12L, 50L, 27L, 12L
), height = c(90L, 90L, 90L, 90L), LastNew = c(7L, 7L, 21L, 21L
)), .Names = c("int", "age", "species", "Time", "height", "LastNew"
), row.names = c(1L, 11L, 16L, 20L), class = "data.frame")

我现在需要做的是创建一个输出,它基本上是将每行 estvals 乘以每行 modset 的结果。 在我上面的示例中,我会得到 8 行(每个 estval 记录有 2 条记录):

outs <- structure(list(int = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), age = c(6L, 
6L, 18L, 18L, 6L, 6L, 18L, 18L), species = c(1L, 1L, 1L, 1L, 
0L, 0L, 0L, 0L), Time = c(12L, 12L, 50L, 50L, 27L, 27L, 12L, 
12L), height = c(0L, 90L, 0L, 90L, 0L, 90L, 0L, 90L), LastNew = c(7L, 
0L, 7L, 0L, 21L, 0L, 21L, 0L)), .Names = c("int", "age", "species", 
"Time", "height", "LastNew"), class = "data.frame", row.names = c(NA, 
-8L))

我还没想出解决办法。我已经尝试在 apply() 或 sweep() 中设置一些东西,但似乎无法获得能够满足我要求的功能。

最终,我为 SE 生成无条件估计,以在模型平均后建立适当的置信区间。因此,上面的每个估计都会生成各种情况下的生存估计,最终将以图形方式显示。

我们可以使用

n1 <- nrow(modset)
n2 <- nrow(estvals)
outs <- modset[rep(1:n1, times = n2), ] * estvals[rep(1:n2, each = n1), ]

无论您有矩阵还是数据框,这都适用。我用rep生成的索引也可以通过expand.grid.

得到