On Wed, Aug 19, 2009 at 3:52 PM, Greg Snow <greg.s...@imail.org> wrote:

> Instead of using smooth.spline, use lm with spline terms, e.g.:
>
> > library(splines)
> > sp.fit <- lm(y~bs(x,4))
>
> Now both use predict.lm for the predictions and all will be consistent.
>
> Hope this helps,
>
> --
> Gregory (Greg) L. Snow Ph.D.
> Statistical Data Center
> Intermountain Healthcare
> greg.s...@imail.org
> 801.408.8111


Hi Greg,

This is opposite to the way I was thinking, because the rest of our code
assumes splines.  But your solution is clean and elegant.
Thank you

/Christian


> > -----Original Message-----
> > From: r-devel-boun...@r-project.org [mailto:r-devel-boun...@r-
> > project.org] On Behalf Of Christian Brechbühler
> > Sent: Monday, August 17, 2009 2:54 PM
> > To: r-de...@stat.math.ethz.ch
> > Subject: [Rd] Polymorphism of predict
> >
> > I can fit a line to a set of given points, e.g.,
> >
> > > sm.fit <- smooth.spline(1:4,1:4)
> > > lm.fit <- lm(y~x, data=list(x=1:4,y=1:4))
> >
> > Now I have two objects representing the straight line y(x)=x, of class
> > "smooth.spline" and "lm", respectively.
> > And as could be expected in object orientation, both have a method
> > "predict", which I could use for
> > interpolating some new points on the line.  So far so good.  BUT the
> > two
> > methods require different
> > arguments, and return different structures:
> >
> > > predict(sm.fit, 1.5:4)
> > $x
> > [1] 1.5 2.5 3.5
> >
> > $y
> > [1] 1.5 2.5 3.5
> >
> > > predict(lm.fit, list(x=1.5:4))
> >   1   2   3
> > 1.5 2.5 3.5
> >
> > I probably don't understand the motivation behind this design, but it
> > seems
> > ugly.  If, hoping for nice
> > polymorphism, I call predict(lm.fit, 1.5:4), I get an error: "numeric
> > 'envir' arg not of length one".
> >
> > I expected something like the classic OO example, class Shape:  you can
> > call
> > area() or paint() on
> > any object of the class.
> >
> > Questions:
> > * Why does "predict" act so inconsistently?
> > * Is there a nicer interface that hides it?
> > * Are there plans to change the current design?
> >
> > Assuming "no" to the latter two -- what are my options?  Create
> > as.smooth.spline(...) that would accept an "lm" object?
> > My goal is to write OO style code, that doesn't need to know which kind
> > it's
> > working with.
> > Thanks,
> > /Christian
> >
>
>
> >       [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-devel@r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
>

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to