考虑以下完整的R示例:
setClass("foo", representation(data = "data.frame"))
if (!isGeneric("plot"))
setGeneric("plot", function(x, y, ...) standardGeneric("plot"))
setMethod(f = "plot",
signature(x = "foo", y = 'missing'),
definition = function(x, y, ...) {
plot(data$x, data$y)
}
)
fooObject = new('foo', data=data.frame(x=rnorm(100), y =rnorm(100)))
绘制对象失败如下:
> plot(fooObject)
Error in as.double(y) :
cannot coerce type 'S4' to vector of type 'double'
原因似乎是为S4对象fooObject调用了通用的plot()函数。但是,似乎存在正确的(?)方法。显然,我对“正确”的定义是关闭的。有人可以解释发生了什么吗?
> showMethods('plot')
Function: plot (package graphics)
x="ANY", y="ANY"
x="bootFlexclust", y="missing"
x="color", y="ANY"
x="foo", y="missing"
答案 0 :(得分:0)
您的问题只是您没有访问对象的插槽。试试这个:
setMethod(f = "plot",
signature(x = "foo", y = "missing"),
definition = function(x, y, ...) {
slotdata<-x@data
plot(slotdata$x, slotdata$y)
}
)
我有一个类似于在包内定义的功能图的问题,继续使用图形标准Generics:
Error in as.double(x) :
cannot coerce type 'S4' to vector of type 'double'
事实证明,在构建软件包时我忘记了导出它。