我正在尝试为矩阵中的每个单元格条目写入最小值,即在相同维度的新矩阵中的rowsum值或colsum值。
例如:
说我有矩阵c看起来像这样:
x <- matrix(seq(1:6),2)
x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
它的rowum和colsum是:
rowSums(x)
[1] 9 12
colSums(x)
[1] 3 7 11
基于该信息,新矩阵应如下所示:
[,1] [,2] [,3]
[1,] 3 7 9
[2,] 3 7 11
我一直在考虑使用apply但我不知道如何编写if语句来为每个单元格条目写出rowsum或colsum中的最小值。有什么想法吗?
答案 0 :(得分:6)
这可以被认为是行和列总和的外积,其中函数采用最小值:
outer(rowSums(x), colSums(x), FUN=pmin)
## [,1] [,2] [,3]
## [1,] 3 7 9
## [2,] 3 7 11
答案 1 :(得分:2)
x[] <- pmin(rep(colSums(x), each = nrow(x)), rep(rowSums(x), times = ncol(x)))
x
# [,1] [,2] [,3]
# [1,] 3 7 9
# [2,] 3 7 11