2016-04-17 3 views
1

У меня есть функция, которую нуждается в, чтобы ожидать formula в качестве входного сигнала в виде y~x, например. Затем мне нужно передать серию x-values в эту формулу, чтобы вытащить y.Как преобразовать формулу в функцию или применить формулу к некоторым значениям?

Например, если моя формула y~x^2, а моя серия значений x (1,2,3,4), то я должен ожидать (1,4,9,16) в качестве вывода.

Скажем, у меня есть формула, как это: formula1 <- y~x:

Вот что я пытался до сих пор:

  • Преобразование формулы в функцию: as.function(formula1)
  • Использование model.frame и model.matrix как так :

Нравится так:

formula1 <- y~x^2 
x <- c(1,2,3,4) 
my_data <- data.frame("x" = x, "y" = rep(0,length(x))) 
model_frame <- model.frame(formula1, data = my_data) 
my_design_matrix <- model.matrix(formula1, model_frame) 
  • Я попытался с помощью NLS2, но у меня нет каких-либо параметров для оптимизации, так что я не вижу смысла.

Что я могу использовать для этого?

Вот ресурсы, я консультировался:
How to apply a formula to a vector in R?

Pass formula to function in R?

ответ

1

Я не уверен, если это самый элегантный способ, но он должен делать, как вам требуется:

Идея заключается в том извлечь правую часть объекта формулы и проанализировать его как строку. Результат может быть оценен.

as.function <- function(formula) { 
    cmd <- tail(as.character(formula),1) 
    exp <- parse(text=cmd) 
    function(...) eval(exp, list(...)) 
} 

Однако обратите внимание, что есть действительные формулы, которые не могут быть оценены таким образом, например y ~ a:c.

, который дает нам

> f <- as.function(y ~ x^2) 
> f(x=1:10) 
[1] 1 4 9 16 25 36 49 64 81 100 

Если вы хотите отправить data.frame сгенерированной функции вы можете просто сделать

as.function <- function(formula) { 
    cmd <- tail(as.character(formula),1) 
    exp <- parse(text=cmd) 
    function(df) eval(exp, df) 
} 

и получить

> f <- as.function(y ~ x^2) 
> f(data.frame(x=1:10)) 
[1] 1 4 9 16 25 36 49 64 81 100 
+0

Это отличный. Спасибо. – Candic3

Смежные вопросы