为什么 as_tibble(mtcars,rownames = NA) 不显示行名?文档说它应该

Why does as_tibble(mtcars,rownames = NA) not show the row names? The documentation says that it should

mtcars 显然有行名:

> head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

as_tibble 的文档告诉我,如果我设置 rownames = NA,我将获得行为:NA: keep row names。我试过这个:

> as_tibble(mtcars, rownames = NA)
# A tibble: 32 x 11
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
 * <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
 2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
 3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
 4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
 5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
 6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
 7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
 8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2
 9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
# … with 22 more rows

很明显,行名不见了。默认行为,即 as_tibble(mtcars,rownames = NULL)(相当于 as_tibble(mtcars))产生相同的输出,但 1 上方和 <dbl> 左侧的星号被移除。

如果我改为使用 rownamesas_tibble(mtcars,rownames = "String here") 的第三个也是最后一个选项,我最终可以保留行名称:

> as_tibble(mtcars,rownames = "String here")
# A tibble: 32 x 12
   `String here`       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
   <chr>             <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 Mazda RX4          21       6  160    110  3.9   2.62  16.5     0     1     4     4
 2 Mazda RX4 Wag      21       6  160    110  3.9   2.88  17.0     0     1     4     4
 3 Datsun 710         22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
 4 Hornet 4 Drive     21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
 5 Hornet Sportabout  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
 6 Valiant            18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
 7 Duster 360         14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
 8 Merc 240D          24.4     4  147.    62  3.69  3.19  20       1     0     4     2
 9 Merc 230           22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
10 Merc 280           19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
# … with 22 more rows

但为什么最后一步是必要的?文档说如果我设置 rownames = NA,那么我将得到行为:NA: keep row names。这个示例如何阻止 rownames = NA 保留行名称,正如文档中声称的那样?

使用 as_tibble(mtcars, rownames = NA) 可以保留行名,但它们是不可见的。

library(tidyverse)

as_tibble(mtcars, rownames = NA) %>% 
  rownames_to_column()

#> # A tibble: 32 x 12
#>    rowname       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#>    <chr>       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1 Mazda RX4    21       6  160    110  3.9   2.62  16.5     0     1     4     4
#>  2 Mazda RX4 ~  21       6  160    110  3.9   2.88  17.0     0     1     4     4
#>  3 Datsun 710   22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
#>  4 Hornet 4 D~  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
#>  5 Hornet Spo~  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
#>  6 Valiant      18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
#>  7 Duster 360   14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
#>  8 Merc 240D    24.4     4  147.    62  3.69  3.19  20       1     0     4     2
#>  9 Merc 230     22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
#> 10 Merc 280     19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
#> # ... with 22 more rows

当您不使用 rownames = NA

时,检查 rownames_to_column() 的输出差异
as_tibble(mtcars) %>% 
  rownames_to_column()

#> # A tibble: 32 x 12
#>    rowname   mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#>    <chr>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1 1        21       6  160    110  3.9   2.62  16.5     0     1     4     4
#>  2 2        21       6  160    110  3.9   2.88  17.0     0     1     4     4
#>  3 3        22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
#>  4 4        21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
#>  5 5        18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
#>  6 6        18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
#>  7 7        14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
#>  8 8        24.4     4  147.    62  3.69  3.19  20       1     0     4     2
#>  9 9        22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
#> 10 10       19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
#> # ... with 22 more rows

reprex package (v1.0.0)

于 2021 年 3 月 2 日创建