获取矩阵的最后一个元素

sag*_*sag 7 r matrix

考虑我有以下矩阵

M <- matrix(1:9, 3, 3)
M
#      [,1] [,2] [,3]
# [1,]    1    4    7
# [2,]    2    5    8
# [3,]    3    6    9
Run Code Online (Sandbox Code Playgroud)

我只是想找到最后一个元素即 M[3, 3]

由于此矩阵列和行大小是动态的,我们无法对其进行硬编码 M[3, 3]

如何获得最后一个元素的值?

目前我已经完成了以下代码

M[nrow(M), ncol(M)]
# [1] 9
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

Dav*_*urg 17

R中的矩阵只是具有dim属性的向量,因此您可以将其子集化为一个

M[length(M)]
## [1] 9
Run Code Online (Sandbox Code Playgroud)

虽然(正如@James所提到的)你的解决方案可能会更加通用,以防你想要保持矩阵结构,就像你可以添加的那样 drop = FALSE

M[nrow(M), ncol(M), drop = FALSE]
#      [,1]
# [1,]    9
Run Code Online (Sandbox Code Playgroud)

虽然,我的解决方案也可以使用dim<-替换功能以类似的方式进行修改

`dim<-`(M[length(M)], c(1,1))
#      [,1]
# [1,]    9
Run Code Online (Sandbox Code Playgroud)

一些基准(由@ zx8754提供)

M <- matrix(runif(1000000),nrow=1000)

microbenchmark(
  nrow_ncol={
    M[nrow(M),ncol(M)]
  },
  dim12={
    M[dim(M)[1],dim(M)[2]]
  },
  length1={
    M[length(M)]
  },
  tail1={
    tail(c(M),1)
  },
  times = 1000
)

# Unit: nanoseconds
#      expr     min      lq        mean    median      uq      max neval cld
# nrow_ncol     605    1209    3799.908    3623.0    6038    27167  1000   a 
#     dim12     302     605    2333.241    1811.0    3623    19922  1000   a 
#   length1       0     303    2269.564    1510.5    3925    14792  1000   a 
#    tail 1 3103005 3320034 4022028.561 3377234.0 3467487 42777080  1000   b
Run Code Online (Sandbox Code Playgroud)

  • 但op提出的方法是完全可以的,并且稍微不那么混淆了意图. (3认同)
  • @Roland我同意它"好",但我认为OP并没有意识到他只处理一个向量,并且在处理R中的矩阵时要意识到它的重要性. (3认同)
  • @DavidArenburg - Benchmark明确指出我可以继续使用M [length(M)].非常感谢 (2认同)