将矩阵应用于函数

Ami*_*vid 6 r function matrix

尝试使用mapply将矩阵应用于函数,但未成功

我正在尝试解决一组针对不同参数的方程式。以一种更简单的函数集形式,我试图将一个函数传递给矩阵-常量-

     a b c
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
Run Code Online (Sandbox Code Playgroud)

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

建立矩阵

my_vector <- 1:9
constants <- matrix(my_vector, 3, 3)
colnames(constants) <- c("a", "b", "c")
constants
Run Code Online (Sandbox Code Playgroud)

目标功能

fun_abc <- function(a, b, c){
  return(3 * a + 2 * b + 3 * c)
}
Run Code Online (Sandbox Code Playgroud)

将常量应用于函数

mapply(fun_abc, 2, constants)
Run Code Online (Sandbox Code Playgroud)

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

Ron*_*hah 4

您可以直接将值相乘并获取rowSums按行求和

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

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

colSums(t(constants) * vals)
#[1] 32 40 48
Run Code Online (Sandbox Code Playgroud)

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

rowSums(sweep(constants, 2, vals, `*`))
Run Code Online (Sandbox Code Playgroud)