R S3方法不从命名空间导出

时间:2018-03-16 10:59:13

标签: r namespaces package vegan

为什么会出现以下错误消息:

g

虽然这种S3方法很好用。例如,如果我输入> vegan::reorder.hclust Error: 'reorder.hclust' is not an exported object from 'namespace:vegan' ,我会获得预期的帮助页面,help(reorder.hclust, package = "vegan")会在控制台上显示该功能的源代码...
vegan:::reorder.hclust安装的NAMESPACE文件也包含vegan

我想在另一个包中使用此功能,我需要导入它或使用S3method(reorder, hclust)

vegan::reorder.hclust

1 个答案:

答案 0 :(得分:3)

您收到该错误是因为vegan没有导出该功能。它可以为没有输出的东西提供帮助。使用三个冒号vegan:::reorder.hclust显示未导出的内部函数;通常你应该避免使用它们。

但是,当加载vegan包时,其reorder.hclust函数将添加到reorder的方法表中。因此,您只需要确保它已加载,然后如果hchclust对象,reorder(hc)将调用reorder.hclust方法。您可以将requireNamespace("vegan")放入代码中,或从NAMESPACE文件中的vegan导入内容。

如果有两种reorder.hclust方法(由加载的不同包定义),那么我认为您无法轻松指定vegan除了使用CRAN将反对的vegan:::reorder.hclust之外的其他用户。您需要要求vegan维护者导出他们的功能,以便您可以使用合法vegan::reorder.hclust访问它,或将代码复制到您自己的包中,或者其他一些不方便的方法。