考虑我有以下矩阵
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)