使用 mapply 划分 R 中的矩阵列表

Using mapply to divide lists of matrices in R

我有以下数据。

set.seed(12345)

df1z <- matrix(rnorm(10), nrow=10, ncol=10)
df2z <- df1z
dfZ <- list(df1z, df2z)

df1x <- matrix(rnorm(10), nrow=10, ncol=1)
df2x <- df1x
dfX <- list(df1x, df2x)

除了使用mapply,我基本上想执行以下设置操作。

A1 = t(t(df1z)/as.vector(df1x))
A2 = t(t(df2z)/as.vector(df2x))

当我尝试以下操作时,我得到一个空列表。

mapply(function(a, b) return(t(t(a)/b), dfZ, dfX, SIMPLIFY=F))

关于如何做到这一点有什么想法吗?

非常感谢!

括号放错地方了。如果我们修复它并添加 as.vector,那么它给出与 A1A2 相同的结果。此外,虽然它不是按预期工作所必需的,但为了稍微简化它,我们删除了不必要的 return 并使用 Map 而不是 mapply -- Map类似于 mapply 但没有简化。

ans <- Map(function(a, b) t(t(a)/as.vector(b)), dfZ, dfX)
identical(ans, list(A1, A2))
## [1] TRUE

我们可以复制 'b' 使长度相等,然后进行除法

ans1 <- Map(function(a, b) a/b[col(a)], dfZ, dfX)
identical(ans1, list(A1, A2))
#[1] TRUE

或使用tidyverse

library(tidyverse)
ans2 <- map2(dfZ, dfX, ~ .x/.y[,1][col(.x)])
identical(ans2, list(A1, A2))
#[1] TRUE