使用 mapply 将具有两个参数的函数应用于两个矩阵的每一行

Using mapply to apply a function with two arguments to every row of two matrices

我有一个函数 f(x,y),它接受两个向量参数作为输入,returns 一个向量作为输出(所有长度 n 都相等)。我试图将此函数应用于两个 m x n 矩阵 M1 和 M2 的每一行到 return 一个 m x n 矩阵,即 M1 和 M2 的每一行都对应于输入参数 x,y。

我使用了以下语法:

M3 = mapply(f, M1, M2)

其中给出了一条错误消息,指出 f 正在将 NA 作为输入参数。在我的测试示例中,

M1 = rbind(c(5,0,0,6),c(20,0,0,0))
M2 = rbind(c(5,15,25,55),c(0,0,5,40))

和 f(M1[1,],M2[1,]), f(M1[2,],M2[2]) return 有效结果。我的mapply应用程序有什么问题?我认为这可能是行与列应用程序的问题,但是 mapply(f, t(M1), t(M2)) returns 同样的错误,所以很明显 f 被喂养的不是M1,M2 的各行(或列)作为输入。

如果我们想在每一行上应用,则按行拆分矩阵并作为 list

mapply(f, asplit(M1, 1), asplit(M2, 1))

请注意 matrix(或 vector)上的 mapply 将遍历每个元素,即这里的单位是单个元素,而在 data.frame/data.table/tibble 中,单个单元是列。通过按行拆分 (asplit - MARGIN = 1),我们得到 list 个向量,这里的单位是列表元素

正如@Adam 在评论中提到的那样,它可能需要 transposed(未经 f 测试不清楚)