У меня есть data.frame
с числовыми данными и функцией, которая принимает имена столбцов в качестве аргументов. Как вызвать функцию с этими столбцами в качестве аргументов? Что-то вроде распаковки python.
Причина, по которой я не могу просто жестко закодировать, состоит в том, что имена столбцов, количество столбцов и сама функция изменяются, но всегда так, чтобы имена столбцов соответствовали аргументам функции.
Вот простая версия проблемы.
func = function(a, b, c) a * b^2 + c
df = data.frame(a = rnorm(10), b = rnorm(10), c = rnorm(10))
df %>%
mutate(result = func(.)) # what to do here that doesn't involve "a", "b", "c"?
Я пробовал это решение , включающее rowwise()
, но оно очень медленное. func
может выполнять векторизованные вычисления.
Мое текущее решение довольно уродливо:
call_str = paste0("func(", paste0(colnames(df), " = df$", colnames(df), collapse=","), ")")
result = eval(parse(text = call_str))
В этом примере call_str
равно
"func(a = df$a, b = df$b, c = df$c)"