Skip to content

as_tibble.matrix should keep rownames attribute #288

Closed
@ClaytonJY

Description

@ClaytonJY

Currently, as_tibble.matrix() throws away rownames:

library(tibble)

mtmatrix <- as.matrix(mtcars)
rownames(mtmatrix)
#>  [1] "Mazda RX4"           "Mazda RX4 Wag"       "Datsun 710"         
#>  [4] "Hornet 4 Drive"      "Hornet Sportabout"   "Valiant"            
#>  [7] "Duster 360"          "Merc 240D"           "Merc 230"           
#> [10] "Merc 280"            "Merc 280C"           "Merc 450SE"         
#> [13] "Merc 450SL"          "Merc 450SLC"         "Cadillac Fleetwood" 
#> [16] "Lincoln Continental" "Chrysler Imperial"   "Fiat 128"           
#> [19] "Honda Civic"         "Toyota Corolla"      "Toyota Corona"      
#> [22] "Dodge Challenger"    "AMC Javelin"         "Camaro Z28"         
#> [25] "Pontiac Firebird"    "Fiat X1-9"           "Porsche 914-2"      
#> [28] "Lotus Europa"        "Ford Pantera L"      "Ferrari Dino"       
#> [31] "Maserati Bora"       "Volvo 142E"
rownames(as_tibble(mtmatrix))
#>  [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10" "11" "12" "13" "14"
#> [15] "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28"
#> [29] "29" "30" "31" "32"

This is inconsistent with as_tibble.data.frame, which makes sure to keep rownames

all.equal(
  rownames(mtcars),
  rownames(as_tibble(mtcars))
)
#> [1] TRUE

If a user has a rownamed matrix and wants a tibble with those rownames in it (e.g. confusion matrices from the randomForest package), they have to convert to a base data.frame first

mtmatrix %>%
  as.data.frame() %>%
  as_tibble() %>%
  rownames_to_column("rname")

Fixing this bug would remove the need for the as.data.frame() call, and make the steps match those for doing the same with a data.frame, e.g.

mtcars %>%
  as_tibble() %>%
  rownames_to_column("rname")

This only saves one step, but standardizing the tibble interface across matrices and data.frames where possible seems like a worthy UX improvement.

Session Info

Used newest github version to make sure this wasn't fixed already

devtools::session_info("tibble")
#> Session info --------------------------------------------------------------
#>  setting  value                       
#>  version  R version 3.4.1 (2017-06-30)
#>  system   x86_64, linux-gnu           
#>  ui       X11                         
#>  language (EN)                        
#>  collate  en_US.UTF-8                 
#>  tz       America/New_York            
#>  date     2017-08-02
#> Packages ------------------------------------------------------------------
#>  package * version    date       source                           
#>  Rcpp      0.12.12    2017-07-15 cran (@0.12.12)                  
#>  rlang     0.1.1      2017-05-18 CRAN (R 3.4.0)                   
#>  tibble  * 1.3.3.9001 2017-08-02 Github (tidyverse/tibble@12767ae)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions