是否有必要在R包中导出基本方法扩展?文档含义?

时间:2012-01-20 00:56:00

标签: r documentation namespaces extension-methods package

原则上,我可以保留这些扩展名未导出,这也允许我不为这些已经记录良好的方法添加冗余文档,同时仍然传递R CMD check myPackage而没有任何报告{{1 }}第

有什么缺点,如果有的话?是否可能建议将基本方法的扩展分隔在定义它们的包中?或者,如果没有导出某些核心方法扩展,这是否会使另一个包更难依赖我的?

例如,如果我没有记录并且不导出以下内容:

WARNING

我正试图通过名称空间和基本方法扩展来充实一些关于最佳实践的细节。

1 个答案:

答案 0 :(得分:4)

如果您不导出方法,那么用户(在命令行或尝试通过导入在自己的包中使用您的类和方法)将无法使用它们 - 您的类将被显示使用show,ANY-method

您没有记录通用show,而是适合您的班级show,myPackageSpecialClass-method的方法。如果在你的NAMESPACE中你

import(methods)
exportMethods(show)

(请注意,无法在通用节目中仅导出某些方法)并且不提供任何文档,R CMD check会抱怨

* checking for missing documentation entries ... WARNING
Undocumented S4 methods:
  generic 'show' and siglist 'myPackageSpecialClass'
All user-level objects in a package (including S4 classes and methods)
should have documentation entries.
See the chapter 'Writing R documentation files' in the 'Writing R
Extensions' manual.

你的例子(我知道这不是一个严肃的表演方法:))是一个很好的说明,为什么方法可能被记录 - 向用户解释为什么每次他们尝试并显示他们得到的对象{{ 1}},当他们期待某种关于对象的描述时。

文档的一种方法是将具有该类的方法分组到单个Rd文件NA中。该文件将包含别名

myPackageSpecialClass-class.Rd

和用法

\alias{show,myPackageSpecialClass-method}

只要没有使用花哨的多重调度,这就可以工作,也就是说,方法适用于哪一类。如果用户向\S4method{show}{myPackageSpacialClass}(object) 请求帮助,则始终指向方法包帮助页面。有关您的方法/类的帮助,他们需要询问特定类型的帮助。有几种方法可以做到这一点,但我最喜欢的是

?show

这对普通用户来说并不直观; (class |方法)? ...公式没有被广泛使用,“泛型,签名”的规范需要对S4如何工作有很多理解,包括可能访问class ? myPackageSpecialClass method ? "show,myPackageSpecialClass" (因为该方法可能在myPackageSpecialClass的类上实现继承自)或selectMethod(show, "myPackageSpecialClass")(因为你想知道你可以用myPackageSpecialClass做什么)。