2014-07-04 24 views
0

我想为R中的'foo'类创建一个通用函数predict(),以便当predict()的第二个参数是class时调用它'foo':在R中使用foo(x,bar)的第二个参数调用的泛型函数R

class(y.foo) <- "foo" 

predict(x, y.foo) 

可能吗?怎么做?

+0

请提供更多信息,你正在尝试去做。什么是'x'类?你这样做的用例是什么?有可能用S4班做到这一点,但这可能是矫枉过正。您提供的信息越多,越容易帮助您。 – Andrie

+0

经典S3调度只发生在第一个对象的类上。在你的情况下,什么是'class(x)'? – MrFlick

+0

x的类是数字。我知道唯一的可能性是做出predict.numeric,检查第二个参数的类是否是“foo”? – Tim

回答

1

试试这个。这里我们foo方法只是输出"foo"和真正的代码,它将与任何foo方法来代替您有:

predict <- function(x, foo = NULL, ...) UseMethod("predict", foo) 
predict.foo <- function(x, foo, ...) "foo" # replace with your foo method 
predict.default <- function(x, foo = NULL, ...) if (is.null(foo)) 
     stats::predict(x, ...) else stats::predict(x, foo, ...) 

现在测试一下:

y.foo <- 1 
class(y.foo) <- "foo" 
predict(0, y.foo) 
## [1] "foo" 

fm <- lm(demand ~ Time, BOD) 

predict(fm) 
##  1  2  3  4  5  6 
## 10.24286 11.96429 13.68571 15.40714 17.12857 20.57143 

predict(fm, newdata = list(Time = 1:2)) 
##  1  2 
## 10.24286 11.96429 

predict(fm, list(Time = 1:2)) # same 
##  1  2 
## 10.24286 11.96429 
相关问题