CFB
CFB

Reputation: 109

Tidyverse Solution for Using Tibble Columns as Input to a Function

I am trying to run a function on all on combinations of two column vectors in a tibble.

library(tidyverse)
combination <- tibble(x = c(1, 2), y = c(3, 4))

sum_square <- function(x, y) {
  x^2+y^2
}

I would like to run this function all combinations of column x and column y:

sum_square(1, 3)
sum_square(1, 4)
sum_square(2, 3)
sum_square(2, 4)

Ideally I would like a tidyverse solution.

Upvotes: 1

Views: 231

Answers (1)

akrun
akrun

Reputation: 887118

We can first expand and then apply sum_square on the expanded dataset

library(tidyverse)
expand(combination, x, y) %>% 
      mutate(new = sum_square(x, y))
# A tibble: 4 x 3
#      x     y   new
#  <dbl> <dbl> <dbl>
#1     1     3    10
#2     1     4    17
#3     2     3    13
#4     2     4    20

Another option is outer

combination %>%
       reduce(outer, FUN = sum_square) %>% 
       c  %>%
       tibble(new = .)

Upvotes: 3

Related Questions