当我只对矩阵的一行进行子集并将其传递给nrow为nrow(x[1,])
或nrow(x[2,])
时,它会返回NULL
值,而不是1
。
但是,如果我将多个行分配,则nrow(x[1:2,])
会返回2
,这是正确的值。
需要有关如何处理nrow(x[i,])
等案件的帮助。
提前谢谢。
答案 0 :(得分:1)
您可以使用NCOL()
和NROW()
,将矢量视为1列矩阵,即
x <- structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1), .Dim = c(3L, 3L))
x
#> [,1] [,2] [,3]
#> [1,] 1 1 1
#> [2,] 1 1 1
#> [3,] 1 1 1
现在,正如您指出nrow(x[1,])
和nrow(x[2,])
返回NULL
nrow(x[1,])
#> NULL
nrow(x[2,])
#> NULL
但是,
NCOL(x[1,])
#> [1] 1
NROW(x[1,])
#> [1] 3
你也可以让对象成为一个小组,但我想你不想用矩阵去那里。无论如何,
# install.packages(c("tidyverse"), dependencies = TRUE)
library(tidyverse)
z <- x %>% as_tibble()
nrow(z[1,])
#> [1] 1
ncol(z[1,])
#> [1] 3
答案 1 :(得分:1)
您还可以使用 drop = FALSE
对矩阵进行子集化,从而使 R 免于删除矩阵类:
(m <- matrix(1, 3, 3))
#> [,1] [,2] [,3]
#> [1,] 1 1 1
#> [2,] 1 1 1
#> [3,] 1 1 1
class(m[1, ])
#> [1] "numeric"
class(m[1, , drop = FALSE])
#> [1] "matrix" "array"
然后nrow()
返回想要的结果:
nrow(m[1, , drop = FALSE])
#> [1] 1
nrow(m[2, , drop = FALSE])
#> [1] 1