子集一个矩阵,如果索引无效则得到NA

ttl*_*ker 5 r matrix subset

我正在尝试将矩阵子集化以始终获得3*3矩阵.

例如,矩阵是子集a<-matrix(1:15,3,5),通常当我使用它进行子集时a[0:2,0:2],我得到:

      [,1] [,2]
[1,]    1    4
[2,]    2    5
Run Code Online (Sandbox Code Playgroud)

但我希望得到类似的东西:

      [,1] [,2] [,3]
[1,]   NA    NA   NA
[2,]   NA    1    4
[3,]   NA    2    5
Run Code Online (Sandbox Code Playgroud)

the*_*ail 4

当您选择时,强制所有0sNA以及任何“越界”值:

ro <- 0:2
co <- 0:2
a[replace(ro,ro == 0 | ro > nrow(a),NA),
  replace(co,co == 0 | co > ncol(a),NA)]

#     [,1] [,2] [,3]
#[1,]   NA   NA   NA
#[2,]   NA    1    4
#[3,]   NA    2    5
Run Code Online (Sandbox Code Playgroud)

这甚至适用于您想要缺少的部分的组合:

ro <- c(1,0,2)
co <- 0:2
a[replace(ro,ro == 0 | ro > nrow(a),NA),
  replace(co,co == 0 | co > ncol(a),NA)]

#     [,1] [,2] [,3]
#[1,]   NA    1    4
#[2,]   NA   NA   NA
#[3,]   NA    2    5
Run Code Online (Sandbox Code Playgroud)

  • 也许你还可以添加 `ro == 0 | ro &gt; nrow(a)`(也适用于列)以覆盖任何“下标越界”错误。 (2认同)