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.