2014-12-12 4 views
0

Предположим, у меня есть линейная модель с lm. Просто тривиальное:Как включить модель в R

x = 1:10 
y = 1:10 
lm1 = lm(y ~ x) 

Теперь я хочу, чтобы превратить его в функцию, которая в данном конкретном примере будет вести себя просто как function(x) {x}. Как мне это сделать?

Ну, один из способов будет использовать предсказать:

f = function(x) { predict(lm1, newdata = data.frame(x)) } 

Но это выглядит неоправданно громоздким. Есть ли способ лучше?

+1

вы имели в виду 'F = функция (х) {предсказывающие (LM1, NewData = data.frame (х)) } '? не уверен, для чего предназначен 'seq (x, x)'. – Ricky

+0

Да, точно. Нет причин использовать seq. – akalenuk

+1

Но почему вы видите это громоздким? После написания вы выключены и запущены. Вы можете даже расширить его до 'anyf <-function (x, model) pred (model, newdata = data.frame (x))' tho 'Я думаю, вам нужно будет включить аргумент, чтобы заставить 'name'' x', чтобы соответствовать именам входных переменных указанной модели. –

ответ

0

Я запутался, почему вы хотели бы это сделать, потому что вы просто писать функцию вернуть то, что уже находится в среде R, но вы можете легко просто сделать следующее:

 x = 1:10 
     y = 1:10 
     lm1 = lm(y ~ x) 

     foo <- function(x){ 
       return(x) 
      } 

     foo(lm) 
    > foo(lm) 

     Call: 
     lm(formula = y ~ x) 

     Coefficients: 
     (Intercept)   x 
       0   1 

вы могли бы построить foo() так, что фактический вызов lm() включен в foo():

foo <- function(x, y){ 
      return (lm(y~x)) 
      } 
+2

Я предполагаю, что это всего лишь пример, и он хочет создать модель, которая аппроксимирует набор данных, и применить это как функцию к другим данным (новый x) и выводит новый y. – Ricky