首页 > 解决方案 > 将矩阵应用于函数

问题描述

尝试将矩阵应用于函数,使用 mapply 没有成功

我正在尝试为不同的参数求解一组方程。在一组函数的更简单的形式中,我试图将一个函数传递给一个矩阵 - 常量 -

     a b c
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9

并尝试求解方程3*a + 2*b + 3*c并返回矩阵中每一行的答案。我已将原始函数更改为线性且更简单的函数 - 这就是为什么我更喜欢使用 #mapply 并且以前的解释对我没有帮助。

构建矩阵

my_vector <- 1:9
constants <- matrix(my_vector, 3, 3)
colnames(constants) <- c("a", "b", "c")
constants

目标函数

fun_abc <- function(a, b, c){
  return(3 * a + 2 * b + 3 * c)
}

将常量应用于函数

mapply(fun_abc, 2, constants)

我不断收到错误(函数(a,b,c):缺少参数“c”,没有默认值有人能发现问题吗?

标签: rfunctionmatrix

解决方案


您可以直接将值相乘并rowSums获取逐行总和

vals <- c(3, 2, 3)
rowSums(t(t(constants) * vals))
#[1] 32 40 48

我们使用转置,因为constants * valsvals在每一列中相乘,所以第一个转置是vals逐行相乘,第二个转置是再次获得原始格式的矩阵。如果我们总是有一个方阵 ( nrow == ncol),我们可以减少一个转置并改为使用colSums来获得相同的值。

colSums(t(constants) * vals)
#[1] 32 40 48

如果我们想避免转置,我们也可以使用sweep

rowSums(sweep(constants, 2, vals, `*`))

推荐阅读