如何在R中的两个矩阵中的两列的每个可能组合上应用函数

时间:2017-07-09 02:17:10

标签: r if-statement matrix

我有两个矩阵,每个矩阵有300列; M1M2我正在对它们应用简单的ifelse函数,如下所示:

result<-ifelse(M1[-nrow(M1),]<M2[-nrow(M2),],1,4)


tail(result)


                    X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17
2017-06-26 04:00:00  4  1  1  4  4  4  4  4  4   4   4   4   4   4   4   4   4
2017-06-26 05:00:00  4  1  1  1  4  4  4  4  4   4   4   4   4   4   4   4   4
2017-06-26 06:00:00  4  1  1  1  4  4  4  4  4   4   4   4   4   4   4   4   4
2017-06-26 07:00:00  4  1  1  1  4  4  4  4  4   4   4   4   4   4   4   4   4
2017-06-26 08:00:00  4  1  1  1  1  4  4  4  4   4   4   4   4   4   4   4   4
2017-06-26 09:00:00  4  1  1  1  1  1  4  4  4   4   4   4   4   4   4   4   4

在这种情况下,ifelse函数应用于M1中每个列的M2

中的匹配列

如何在ifelseM1中的每个可能的列组合上应用M2函数,并将结果保存到一个大矩阵(本例中为90000列)或列表矩阵?

1 个答案:

答案 0 :(得分:3)

使用expand.grid获取列索引的笛卡尔积可能会有所帮助。

m1 <- matrix(1:9, ncol=3)
m2 <- matrix(4:12, ncol=3)
g <- expand.grid(1:nrow(m1), 1:ncol(m2))
ans <- ifelse(m1[, g[, 1]] < m2[, g[, 2]], 1, 4)