使用 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 在评论中提到的那样,它可能需要 t
ransposed(未经 f
测试不清楚)
我有一个函数 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 在评论中提到的那样,它可能需要 t
ransposed(未经 f
测试不清楚)