r - 将矩阵应用于函数
问题描述
尝试将矩阵应用于函数,使用 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”,没有默认值有人能发现问题吗?
解决方案
您可以直接将值相乘并rowSums
获取逐行总和
vals <- c(3, 2, 3)
rowSums(t(t(constants) * vals))
#[1] 32 40 48
我们使用转置,因为constants * vals
会vals
在每一列中相乘,所以第一个转置是vals
逐行相乘,第二个转置是再次获得原始格式的矩阵。如果我们总是有一个方阵 ( nrow == ncol
),我们可以减少一个转置并改为使用colSums
来获得相同的值。
colSums(t(constants) * vals)
#[1] 32 40 48
如果我们想避免转置,我们也可以使用sweep
rowSums(sweep(constants, 2, vals, `*`))
推荐阅读
- oracle - 如何连接四个表?
- javascript - 如何将嵌套的 json 数据填充到角度材料下拉列表中
- postgresql - PostgreSQL 产品表和销售表
- python - Python - 是否有可以解码原始二进制数据的二维码扫描仪?
- reactjs - React Native:使用 navigationOptions 将参数传递到不同的屏幕
- java - 使用 jar 文件运行时出现 Whitelabel 错误,但适用于 war 文件以及使用命令 mvn spring-boot:run 运行时
- c++ - 是否可以将二次(或更高)复杂度降低为线性?
- python - 以表格形式获取 p 标签内的数据
- c++ - how do I load a pure blackwhite image as qimage?
- wix - Wix - 如何在 MSI Uninstall 上卸载服务