首页 > 解决方案 > 如何在我的 R 包中将函数导出为 S3 方法?

问题描述

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

然后我写了一些方法,比如print.marco,plot.marco等,我想在print(obj)where中应用这些方法class(obj) = "marco"。在 NAMESPACE 文件(使用 创建roxygen2::document())中,这些函数仅按原样导出,而不是原样导出,并且不S3method被 识别为原样sloop::is_s3_method

我搜索了互联网,但找不到答案或明确的例子。在我的 R 脚本中的 Hadley Wickham 的 R 包中,我简单地记录了添加#' @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 方法做任何特别的事情。只要您导入了 generic,所有方法也将可用。

我想我只需要了解如何导入泛型?

有人可以帮忙吗?

编辑问题是我使用了@export print.marco. 这会覆盖 S3 方法的创建。推杆@export工作正常。感谢 Roland 在下面的评论。

标签: r

解决方案


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

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


推荐阅读