nrow仅为R中的一行返回null值

时间:2018-01-05 04:39:25

标签: r

当我只对矩阵的一行进行子集并将其传递给nrow为nrow(x[1,])nrow(x[2,])时,它会返回NULL值,而不是1

但是,如果我将多个行分配,则nrow(x[1:2,])会返回2,这是正确的值。

需要有关如何处理nrow(x[i,])等案件的帮助。 提前谢谢。

2 个答案:

答案 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