A Quick Appreciation of the R transform Function
[This article was first published on R – Win-Vector Blog, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
R
users who also use the dplyr
package will be able to quickly understand the following code that adds an estimated area column to a data.frame
.
suppressPackageStartupMessages(library("dplyr")) iris %>% mutate( ., Petal.Area = (pi/4)*Petal.Width*Petal.Length) %>% head(.)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species Petal.Area ## 1 5.1 3.5 1.4 0.2 setosa 0.2199115 ## 2 4.9 3.0 1.4 0.2 setosa 0.2199115 ## 3 4.7 3.2 1.3 0.2 setosa 0.2042035 ## 4 4.6 3.1 1.5 0.2 setosa 0.2356194 ## 5 5.0 3.6 1.4 0.2 setosa 0.2199115 ## 6 5.4 3.9 1.7 0.4 setosa 0.5340708
The notation we used above is the “explicit argument” variation we recommend for readability. What a lot of dplyr
users do not seem to know is: base-R
already has this functionality. The function is called transform()
.
To demonstrate this, let’s first detach dplyr
to show that we are not using functions from dplyr
.
detach("package:dplyr", unload = TRUE)
Now let’s write the equivalent pipeline using exclusively base-R
.
iris ->. transform( ., Petal.Area = (pi/4)*Petal.Width*Petal.Length) ->. head(.)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species Petal.Area ## 1 5.1 3.5 1.4 0.2 setosa 0.2199115 ## 2 4.9 3.0 1.4 0.2 setosa 0.2199115 ## 3 4.7 3.2 1.3 0.2 setosa 0.2042035 ## 4 4.6 3.1 1.5 0.2 setosa 0.2356194 ## 5 5.0 3.6 1.4 0.2 setosa 0.2199115 ## 6 5.4 3.9 1.7 0.4 setosa 0.5340708
The “->.
” notation is a the end-of-line variation of the Bizarro Pipe. The transform()
function has been part of R
since 1998. dplyr::mutate()
was introduced in 2014.
git log --all -p --reverse --source -S 'transform <-' commit 41c2f7338c45dbf9eac99c210206bc3657bca98a refs/remotes/origin/tags/R-0-62-4 Author: pd <pd@00db46b3-68df-0310-9c12-caf00c1e9a41> Date: Wed Feb 11 18:31:12 1998 +0000 Added the frametools functions subset() and transform() git-svn-id: https://svn.r-project.org/R/trunk@709 00db46b3-68df-0310-9c12-caf00c1e9a41
To leave a comment for the author, please follow the link and comment on their blog: R – Win-Vector Blog.
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.