tidyverse / forcats

🐈🐈🐈🐈: tools for working with categorical variables (factors)
https://forcats.tidyverse.org/
Other
553 stars 126 forks source link

fct_na_value_to_level() adds a level for NA value even if it is not need #347

Open LukaszDerylo opened 1 year ago

LukaszDerylo commented 1 year ago

Imagine a factor without NAs on which you call fct_na_value_to_level().

Formely, fct_explicit_na() did absolutely nothing in such case:

letters[1:3] %>% factor %>% fct_explicit_na('x')
[1] a b c
Levels: a b c

Now, fct_na_value_to_level()adds a level for NA value even if it is not need:

letters[1:3] %>% factor %>% fct_na_value_to_level('x')
[1] a b c
Levels: a b c x

So, simple replacement (fct_na_value_to_level for fct_explicit_na) breaks existing code sometimes.

Ideally, fct_na_value_to_level() could behave just like fct_explicit_na() did. Or, at least warning message should inform somehow about above case.

hadley commented 1 year ago

Reprex

library(forcats)
letters[1:3] %>% factor %>% fct_na_value_to_level('x')
#> [1] a b c
#> Levels: a b c x

Created on 2023-02-27 with reprex v2.0.2