如何在我的R包中将功能导出为S3方法?

时间:2020-07-27 09:00:05

标签: r

我正在编写一个供我使用的软件包。我创建了marco类的对象。

然后,我编写了一些方法,例如print.marcoplot.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在下面的评论。

1 个答案:

答案 0 :(得分:0)

因此,答案是我使用了错误的@export指令。

我使用了@export print.marco。这将覆盖S3方法的创建。简单地使用@export可以正常工作。感谢Roland在上面的评论。