我有一个矩阵M:

n = 3    
x=c(0.85, 0.1, 0.05)
M <- matrix(NA, n, n); 

for(i in 1:n){
for(j in 1:n){
M[i,j] = x[i] * x[j]
}}

#       [,1]  [,2]   [,3]
# [1,] 0.7225 0.085 0.0425
# [2,] 0.0850 0.010 0.0050
# [3,] 0.0425 0.005 0.0025

我需要求所有反对角线的和,包括M[1,1]和M[n,n].我的计划是

d <-matrix(c(0, 1, 2, 1, 2, 3, 2, 3, 4), n)
tapply(M, d, sum)

     0      1      2      3      4 
0.7225 0.1700 0.0950 0.0100 0.0025 

结果对我来说是正确的.

Question.如何定义矩阵d的条目?可以是列(M)和行(M)上的函数.

推荐答案

首先请注意,outer可以生成矩阵d,而无需明确列出其元素.

matrix(c(0, 1, 2, 1, 2, 3, 2, 3, 4), 3)
#>      [,1] [,2] [,3]
#> [1,]    0    1    2
#> [2,]    1    2    3
#> [3,]    2    3    4
outer(0:2, 0:2, `+`)
#>      [,1] [,2] [,3]
#> [1,]    0    1    2
#> [2,]    1    2    3
#> [3,]    2    3    4

reprex package(v2.0.1)于2022-03-24创建

并在函数中使用它.

sumAntiDiag <- function(M){
  nr <- nrow(M)
  nc <- ncol(M)
  d <- outer(seq.int(nr), seq.int(nc), `+`)
  tapply(M, d, sum)
}

n <- 3    
x <- c(0.85, 0.1, 0.05)
M <- matrix(NA, n, n); 

for(i in 1:n){
  for(j in 1:n){
    M[i,j] = x[i] * x[j]
  }}

sumAntiDiag(M)
#>      2      3      4      5      6 
#> 0.7225 0.1700 0.0950 0.0100 0.0025

reprex package(v2.0.1)于2022-03-24创建

R相关问答推荐

提取R中值和列名的所有可能组合

在R中查找每个组不同时间段的总天数

如何删除R中除某些特定名称外的所有字符串?

无法将传奇添加到cowplot多情节中

基于不同组的列的相关性

提取第一个下划线和最后一个下划线之间的任何内容,例外情况除外

LOF中的插图短文字幕

以相同的方式对每个表进行排序

将一个字符串向量调整为与其他字符串向量完全相同的大小

有没有一种方法可以同时对rhandsontable进行排序和从rhandsontable中删除?

R如何计算现有行的总和以添加新的数据行

如何将一个方阵分解成没有循环的立方体

如何在R中使用混合GAM模型只对固定的影响因素进行适当的预测?

ggplot R:X,Y,Z使用固定/等距的X,Y坐标绘制六边形热图

使用列名和r中的前缀 Select 列的CREATE函数

带查找数据的FCT_REORDER.帧

如何使用包含要子集的值的列表或数据框来子集多个列?

从不同长度的列中随机排序特定数量的元素

我应该如何解决Raster程序包中未对齐的色条记号?

使用`ggsurvfit::ggsurvfit()`