尝试使用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”,没有默认值,有人可以发现问题吗?
您可以直接将值相乘并获取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)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |