Anyway of running multiple functions on a single object?

I have a randomly generated sample of numbers. I would like to get the mean and standard deviation from this sample. I would also like to program this in a way where I don't have to repeat myself. Here is what I could do vs. what I wish I could do. Does anybody know of a function that could do this for me?

set.seed(123)
mean(sample(1:6,10000,replace=T))
sd(sample(1:6,10000,replace=T))

# vs.

set.seed(123)
sample(1:6,10000,replace=T) %>%
  summarise(mean = mean(), sd = sd())

purrr::invoke_map_dbl(list(sd,mean),x=sample(1:6,10000,replace=T))

2 Likes

Perfect, thank you. I was trying invoke_map didn't think to use invoke_map_dbl

Just assign the sample to a variable.

set.seed(123)
my_sample <- sample(1:6, 10000, replace = TRUE)
list(mean = mean(my_sample), sd = sd(my_sample))
1 Like

I want to share another option simply because I like so much that it is possible. I do think invoke_map_dbl is a great solution.

Since you can also store functions in a list you don't have to 'invoke'.

f <- list(mean, sd)
purrr::map(f, ~ .(sample(1:6,10000,replace=T)))

Which equals in base R

lapply(f, function(fun) fun(sample(1:6,10000,replace=T)))
3 Likes