我正在将一段代码从MatLab翻译成R.在MatLab中,其中一行代码是

C=A*B

其中B是矩阵,A是矩阵或标量(例如,A=1),具体取决于某些条件.这非常有效,因为矩阵*矩阵或标量*矩阵在MatLab中以相同的方式编写(直到适合矩阵乘法的维度,就是这种情况).

然而,在R中,事情变得有点复杂.这就变成了

C=A %*% B

这很好用...除非A是标量.事实上,我只是在写

1 %*% diag(5)

输出

不一致的论点

而在MatLab中,这样的问题甚至不存在.

如上所述,有没有办法在保持我所需要的灵活性的同时,将我的MatLab指令C=A*B翻译成R?

请注意,将A设置为单位矩阵不会令人满意:有时A是标量,不能转换为矩阵.我真的需要上面描述的"原始"灵活性.

推荐答案

您可以创建自己的中缀操作符来处理此问题.tryCatch是一种处理错误的方法.如果%*%返回错误,则该函数将执行x * y:

`%m%` <- function(x, y) tryCatch(x %*% y, error = function(e) x * y)

测试:

2 %m% diag(6)
     [,1] [,2]
[1,]    2    0
[2,]    0    2

matrix(1:4, nrow = 2) %m% matrix(4:1, nrow = 2)
     [,1] [,2]
[1,]   13    5
[2,]   20    8

R相关问答推荐

使用lapply的重新定位功能

在特定列上滞后n行,同时扩展框架的长度

过滤器数据.基于两列的帧行和R中的外部向量

隐藏e_mark_line的工具提示

多个过滤器内的一个盒子在仪表板Quarto

将数字转换为分钟和秒

R:从geom_ol()中删除轮廓并导出为pdf

如何将R中数据帧中的任何Nas替换为最后4个值

使用带有OR条件的grepl过滤字符串

ComplexHEAT:使用COLUMN_SPLIT时忽略COLUMN_ORDER

如何在ggplot2中绘制具有特定 colored颜色 的连续色轮

具有重复元素的维恩图

派生程序包| ;无法检索';return()';的正文

在点图上绘制置信度或预测区间ggplot2

有没有办法定制Plot(allEffects())面板标题?

如何在shiny 的应用程序 map 视图宣传单中可视化单点

使用一个标签共享多个组图图例符号

从矩阵创建系数图

把代码写成dplyr中的group_by/摘要更简洁吗?

在具有条件的循环中添加行