如何在 R 包中正确使用其他包中的函数

Posted

技术标签:

【中文标题】如何在 R 包中正确使用其他包中的函数【英文标题】:How to properly use functions from other packages in a R package 【发布时间】:2011-07-12 17:13:31 【问题描述】:

我对此有点困惑。我有一个 R 包,它有一个小函数(不是包的主要部分),其中调用了 psych 包的 principal 函数。如何在DESCRIPTION和NAMESPACE中正确指定?

在DESCRIPTION中设置Depends: psych确保每次加载我的包时都会加载psych包。这可行,但对于我的包裹的这么小部分来说似乎是多余的。

设置Suggests: psych 并在函数中输入require("psych") 是我现在所做的,但是如果没有安装psych,这将不起作用,并且似乎是错误的做法(编写R 扩展说该建议主要用于示例)。

我想我需要导入这个函数。我尝试在DESCRIPTION中设置Imports: psych,在NAMESPACE中设置importFrom(psych,"principal")。这可行,但在没有安装 psych 的计算机上,加载我的包时会出错。

【问题讨论】:

别打扰,psych 是一个很棒的包,我相信你会发现它在某些时候很有用(它有很多辅助函数),尽管你只需要一个功能。祝 PCA/FA 好运! =) 【参考方案1】:

您需要回答的基本问题是:“您是否希望该功能可供软件包的所有用户使用而无需进一步努力?”。如果是,则使用导入 + 适当的命名空间声明,如果否,则使用建议并在 require("psych") 返回 FALSE 时打印信息性错误消息。

我不明白您与导入相关的投诉:“但是在没有安装 psych 的计算机上,加载我的包时会出错”。如果您的包在依赖中,这也是正确的!

【讨论】:

谢谢,非常澄清,我认为建议是最合适的。我认为我在导入时犯了一个愚蠢的错误,我认为当您从 CRAN 安装软件包时也只安装了依赖的软件包,但我想这也发生在导入的软件包中? (仅通过从 zip 文件安装对其进行测试) 是的,安装包时会自动下载导入的包。 那么为什么我们需要importFrom呢?是特定于 S4 的吗?

以上是关于如何在 R 包中正确使用其他包中的函数的主要内容,如果未能解决你的问题,请参考以下文章

如何构造一个使用 Python 中其他包中的函数的函数?

如何在 r 汽车包中的后续情节的完整性中以适当的格式在 x 轴上绘制日期?

如何使用 R 中“ivprobit”包中的“ivprobit”功能?

如何在 R 的 plotly 包中使用 plotly 函数?

如何使用 R 中 gplot() 包中的 plotmean() 函数使用 paste0() 操作 n.label 值以获得观察次数

如何分析 R 包中的底层 C 代码?