Abstract Data Types and the Uniform Referent Principle II: why Douglas T. Ross would hate nest(), unnest(), gather() and spread()
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
In “Abstract Data Types and the Uniform Referent Principle I: why Douglas T. Ross would hate nest(), unnest(), gather() and spread()”, I explained why the notation for interfacing to a data structure should be independent of that structure’s representation.
R programmers honour this principle in the same way that bricks hang in the sky.
All published R code that operates on data frames uses column
names. Sometimes these follow the $ operator;
sometimes the data frame is implicit via attach()
or similar. In the Tidyverse, the column names will often
be part of a mutate(), the data frame being
piped through a sequence of %>% operators.
And this is dreadful software engineering.
Why? Look at the tables below. They represent four different ways of storing my income data.
|
| ||||||||||||||||||||||||||||||||||||||||
|
|
Abstractly, the data is the same in each case, and if you’re
familiar with nest(),
unnest(), gather() and spread(),
you will easily see how to transform one table into
any of the others. But the tables are implemented in very different ways. If you access their elements with $ or an equivalent, and you then change the implementation, you have to rewrite all those accesses. Which is dreadful software engineering.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.