我正在编写一个供我使用的软件包。我创建了marco类的对象。
然后,我编写了一些方法,例如print.marco
,plot.marco
等,我想将它们与print(obj)
一起使用,其中class(obj) = "marco"
。在NAMESPACE文件(使用roxygen2::document()
创建)中,这些函数仅按原样导出,而不是按S3method
导出,sloop::is_s3_method
不能这样识别。
我搜索了互联网,但找不到答案或清晰的示例。在我的R脚本的Hadley Wickham's R packages之后,我简单地记录了添加#' @export print.marco
等的函数。
一个最小的例子
#' Prints a marco object
#' @param marco_obj A marco object.
#' @export print.marco
print.marco(marco_obj){
print(marco_obj$this_is_printable)
}
我从上述书中读到(大胆的我的话)
S3泛型只是函数,因此适用相同的函数规则。 S3方法始终随同泛型,只要您可以(隐式或显式)访问泛型,这些方法也将可用。换句话说,您不需要为S3方法做任何特别的事情。 只要导入了通用,所有方法也将可用。
我想我需要了解的是如何导入泛型?
有人可以帮忙吗?
编辑
问题是我使用了@export print.marco
。这将覆盖S3方法的创建。简单地放置@export
可以正常工作。感谢Roland在下面的评论。
答案 0 :(得分:0)
因此,答案是我使用了错误的@export
指令。
我使用了@export print.marco。这将覆盖S3方法的创建。简单地使用@export可以正常工作。感谢Roland在上面的评论。