Home > database >  R: passing one value to a vector of functions
R: passing one value to a vector of functions

Time:10-15

I have a vector of functions which I want to evaluate on the same number.

Example:

c=1 
functions=c(x^2,2*x,x/2)

(evaluate each function at c=1)

Desired output: c(1,2,0.5)

Which function would be the best to do this besides using a loop?

CodePudding user response:

as a one-off shorthand, you could use an anonymous function:

c = 1
(\(x) c(x^2, 2*x, x/2))(x = c)

CodePudding user response:

Please avoid declaring c as a variable, as it is also the name of a most common function c().

Functions can not be stored in vectors,but can be stored in lists. We can loop through the list to call all functions with the desired value as a variable.

my_value <- 1
my_functions <- list(square = function(x) x^2,
                     dbl = function(x) 2*x,
                     half = function(x) x/2)

sapply(my_functions, \(x) x(my_value))

square    dbl   half 
   1.0    2.0    0.5 

If we do not want names in the desired output, we can unname() it:

sapply(my_functions, \(x) x(my_value)) |>
    unname()

[1] 1.0 2.0 0.5
  •  Tags:  
  • r
  • Related