context("%>%: anonymous functions on right-hand side") test_that("%>% handles anonymous functions in GlobalEnv", { # Simple vectorized function a <- (function(x) 1 + x^2/2 + x^3/9 + x^4/16)(1:100) b <- 1:100 %>% (function(x) 1 + x^2/2 + x^3/9 + x^4/16) # in principle, the dot should also work: c <- 1:100 %>% (function(x) 1 + x^2/2 + x^3/9 + x^4/16)(.) expect_that(a, is_identical_to(b)) expect_that(a, is_identical_to(c)) # Same using preferred magrittr syntax a <- (function(x) 1 + x^2/2 + x^3/9 + x^4/16)(1:100) b <- 1:100 %>% {1 + .^2/2 + .^3/9 + .^4/16} expect_that(a, is_identical_to(b)) # Simple data.frame functions ht1 <- iris %>% (function(x) rbind(head(x), tail(x))) ht2 <- rbind(head(iris), tail(iris)) expect_that(ht1, is_identical_to(ht2)) df1 <- iris[iris$Species == "setosa", 1:4] df2 <- iris %>% (function(x) x[x$Species == "setosa", 1:4]) expect_that(df1, is_identical_to(df2)) }) test_that("%>% handles anonymous functions in other situations.", { # Anonymous functions when %>% used in arguments. df1 <- transform(iris, test = (function(x) x^2)(Sepal.Length)) df2 <- iris %>% transform(test = Sepal.Length %>% (function(x) x^2)) expect_that(df1, is_identical_to(df2)) a <- sin(abs(1:10)) b <- sin(1:10 %>% (function(x) abs(x))) expect_that(a, is_identical_to(b)) # Nested anonymous functions. a <- iris %>% (function(x) x[, 1] %>% (function(y) max(y))) b <- max(iris[, 1]) expect_that(a, is_identical_to(b)) }) test_that("%>% throws error with anonymous functions when not parenthesized.", { expect_that(iris %>% function(x) { head(x) }, throws_error()) })
Generated by dwww version 1.15 on Mon Jun 24 15:19:01 CEST 2024.