Introducing the snakecase package

Malte Grosser


There are many style guides out there which recommend specific naming conventions for programming languages. At 2017’s useR conference Rasmus Bååth showed quite impressively the variety of cases which even exist within base R in his talk “The current state of naming conventions in R”.

However, consistent style is not only about naming new objects.


When you do a data analysis, most of the data already exists and you import it from disk, an API or a database. Here is the first moment in your data analysis when you have to decide if you want to rename your data or leave it as it is.

Let’s say you have some data named in any of the following conventions

string <- c("lowerCamelCase", "ALL_CAPS", "IDontKNOWWhat_thisCASE_is")

You can now easily convert this string for example to snake case via

#> [1] "lower_camel_case"              "all_caps"                     
#> [3] "i_dont_know_what_this_case_is"


Whenever you want to construct a graphic and you don’t like your conventions to come up in it, you can easily convert strings to a more humanly readable output like

to_mixed_case(string, sep_out = " ")
#> [1] "lower Camel Case"              "All Caps"                     
#> [3] "I Dont Know What this Case is"

You might have noticed the sep_out argument. This allows you to combine any case with any output separator to create other well known cases like

to_snake_case(string, sep_out = ".")
#> [1] ""              "all.caps"                     
#> [3] ""
to_snake_case(string, sep_out = "-")
#> [1] "lower-camel-case"              "all-caps"                     
#> [3] "i-dont-know-what-this-case-is"

or completely new ones like

to_screaming_snake_case(string, sep_out = "=")
#> [1] "LOWER=CAMEL=CASE"              "ALL=CAPS"                     


Finally, when you are done with your analysis and want to write data back into a .CSV file or your customers database, which has a camel case convention, you can just use

#> [1] "LowerCamelCase"          "AllCaps"                
#> [3] "IDontKnowWhatThisCaseIs"

Further information

The snakecase package goes quite deep into the little quirks which arise in automatic case conversion. However, it is well tweaked, to handle almost every edge case in an intuitive and elegant manner.

To get a complete overview of its functionality like other cases, handling of abbreviations, special input characters, different parsing options, transliterations and more, I recommend you to have a look into the quite extensive readme on its github repository.

As the package is relatively small and basically consists of its workhorse function to_any_case(), I can also react quite fast on new issues.

And of course I tweet occasionally about new functionality.

To round this up let me give you one advice about best practices: be aware that automatic case conversion depends on the input string and it is recommended to verify the results. Hence you might want to pipe them into dput() and hard-code name changes instead of blindly trusting the output

to_any_case(c("SomeBAdInput", "someGoodInput")) %>% dput()
#> c("some_b_ad_input", "some_good_input")

Happy snakecasing everyone ;)