2

I would like to convert all columns in the mtcars data frame into the class type "character".

library(tidyverse)
mtcars %>% as_tibble() %>% mutate_all(as.character())
#> # 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

My attempt doesn't even mutate a single column to class "character". Hmmmm... how do I mutate all columns into class "character"? I would like to avoid *apply and loops as these types of popular solutions suggest.

Display name
  • 4,153
  • 5
  • 27
  • 75

1 Answers1

4

We just don't need the () as it returns character(0) because it expects an argument in the invocation process. The function expression is evaluated, but the argument expression is empty resulting in a zero length output as the value of the invocation expression

as.character()
#character(0)

library(dplyr)
mtcars %>%
     as_tibble() %>% 
     mutate_all(as.character)

and this has the same effect as

mtcars %>%
      as_tibble %>%
      mutate_all(character(0))

In the newer versions, use mutate with across

mtcars %>%
    mutate(across(everything(), as.character))

If we are using as.character() use it with anonymous function call

mtcars %>%
     as_tibble() %>% 
     mutate_all(~ as.character(.))
akrun
  • 874,273
  • 37
  • 540
  • 662