我正在编写一个简短的 R 包,其中包含一个函数。该函数返回向量列表。我想使用绘图函数来默认绘制使用其中一些向量完成的绘图,添加线条并添加新参数。
例如,如果我使用该survival包,我可以获得以下信息:
library(survival)
data <- survfit(Surv(time, status == 2) ~ 1, data = pbc)
plot(data) # Plots the result of survfit
plot(data, conf.int = "none") # New parameter
Run Code Online (Sandbox Code Playgroud)
为了尝试制作一个可重现的示例:
f <- function(x, y){
b <- x^2
c <- y^2
d <- x+y
return(list(one = b, two = c, three = d))
}
dat <- f(3, 2)
Run Code Online (Sandbox Code Playgroud)
所以使用plot(dat)我想得到与 相同的结果plot(dat$one, dat$two)。我还想添加一个可以设置为TRUE/ 的(新)参数FALSE。
这可能吗?
我想你可能正在寻找课程。您可以使用 S3 系统来实现此目的。
对于您的survival示例,data有该类survfit(请参阅 参考资料class(data))。然后 usingplot(data)将查找一个名为 的函数plot.survfit。这实际上是包中的一个非导出函数survival,位于survival:::plot.survfit。
您可以轻松地对您的包裹执行相同的操作。例如,有一个创建 类 对象的函数my_class,然后为该类定义一个绘图方法:
f <- function(x, y){
b <- x^2
c <- y^2
d <- x+y
r <- list(one = b, two = c, three = d)
class(r) <- c('list', 'my_class') # this is the important bit.
r
}
plot.my_class <- function(x) {
plot(x$one, x$two)
}
Run Code Online (Sandbox Code Playgroud)
现在你的代码应该可以工作:
dat <- f(3, 2)
plot(dat)
Run Code Online (Sandbox Code Playgroud)
您可以放入任何plot.my_class您想要的东西,包括附加参数,只要您的第一个参数是x并且是my_class对象。
plot现在打电话plot.my_class,既然dat是上课my_class。
您还可以添加其他方法,例如 for print。
plot有许多不同的绘图函数可以为不同的类调用,请参见methods(plot)
另请参阅 Hadley 的Advanced R 书籍中有关 S3 的章节。
| 归档时间: |
|
| 查看次数: |
942 次 |
| 最近记录: |