Предоставить фрейм данных в качестве входных данных для многомерной функции

Я видел несколько похожих ответов, но на самом деле ничего из того, что я пытаюсь сделать, не делает. У меня есть функция со многими входами, и я хотел бы иметь возможность предоставить функции фрейм данных со столбцами, названными для входов. Пример ниже

my.fun <- function(alpha,beta,gamma,delta){
    phi = (alpha + beta*gamma)/delta
    return(phi)
  }
my.df <- data.frame(alpha = 3, beta = 4, gamma= 0.5, delta = 11)
my.fun(my.df)

Я хочу, чтобы my.fun присваивал значения каждой переменной в соответствии с соответствующим именем столбца. Предложен другой ответ

mapply(my.fun,my.df[,1],my.df[,2]... etc.) 

но в моем реальном случае гораздо больше, чем 4 переменных, и он быстро становится утомительным. Можете ли вы заставить mapply просто читать имена столбцов вместо того, чтобы явно вводить каждую отдельную запись?


person RichardMNIxon    schedule 13.07.2017    source источник


Ответы (2)


Ты можешь использовать

do.call("my.fun", my.df)

чтобы расширить столбцы data.frame в параметры функции.

person MrFlick    schedule 13.07.2017

Вы также можете изменить функцию, чтобы использовать фрейм данных в качестве входных данных.

my.fun <- function(df){
    with(df, (alpha + beta*gamma)/delta)
}

my.fun(my.df)
[1] 0.4545455
person Damian    schedule 13.07.2017
comment
(alpha + beta * gamma) / delta - это просто фиктивный пример, реальный my.fun - это 60 строк, я бы также хотел, чтобы люди могли вводить отдельные входы, если они хотят - person RichardMNIxon; 14.07.2017