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

25

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

在DESCRIPTION中设置Depends: psych可以确保每次加载我的包时都加载psych包。这样做是可行的,但对于我的包中如此小的一部分来说似乎有些冗余。

现在我所做的是在函数中设置Suggests: psych并输入require("psych"),但如果没有安装psych,则这种方法将无法使用,并且似乎是错误的做法(《编写R扩展》说suggest主要用于示例)。

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


2
别担心,psych 是一个非常棒的软件包,我相信你在某个时候会发现它非常有用(它有很多辅助函数),尽管你只需要一个函数。祝你在主成分分析/因子分析方面好运!=) - aL3xa
1个回答

22
您需要回答的基本问题是:“您是否希望将该功能提供给包的所有用户而无需进一步努力?”如果是,则使用导入和适当的命名空间声明,如果不是,则使用建议,并在require("psych")返回FALSE时打印信息性错误消息。
我不理解您与导入相关的抱怨:“但在未安装 psych 的计算机上加载我的软件包时会出现错误”。这也适用于您的软件包在depends中的情况!

谢谢,解释得非常清楚,我认为建议是最合适的选择。我想我在导入时犯了一个愚蠢的错误,我以为只有依赖包会在从CRAN安装软件包时自动安装,但我猜这也会发生在导入的软件包上?(我仅通过从zip文件安装来测试它) - Sacha Epskamp
是的,当您安装一个包时,导入的包会自动下载。 - hadley
那么为什么我们需要importFrom呢?这是S4特定的吗? - mlt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接