首页 > 解决方案 > 关于 R 包发布和代码可见性的问题

问题描述

当我在 RI 中使用一个包时,安装它并在加载时使用它。现在如果我添加一个使用另一个包的包怎么办?这个包是否也自动下载和加载?还是一般禁止 R 包使用另一个包?我不这么认为。

假设我想发布一个 R 包。在我的代码中,我可以使用其他包中的函数并安装和加载这些包吗?或者当我需要其他包的功能时,它是如何工作的?我是否必须实现需要这个和那个包的消息,并且用户必须在它之前安装和加载它,并且我需要实现错误捕获功能,以防在 pc 系统上找不到包?

当我想发布一个 R 包时,我可以在我的包/代码中使用/调用 Java 代码吗?

对于一个已经发布的包——让我们以 fGarch 包为例——我想看看完整的代码。我怎么能看到这个?我知道 R 是开源的,我认为输入一个空函数并显示代码或多或少是可能的,但有时这不起作用,尤其是我的问题是:有没有办法可以查看整个包的代码?

对于已经发布的包,是否可以查看并查看所有提交的文件?因此,就像提交所有文件的 git 一样的存储库 - 代码本身和需要的其他文件,如描述文件或其他文件 - 我可以看到这些文件并查看它们吗?

此外,关于这里的这篇文章和隐藏功能:R 包中是否有我不能作为最终用户看到的代码?这也指的是我之前的问题,我如何或以哪种方式可以看到 R 包中的整个代码?

标签: rpackagecran

解决方案


我想你在这里有几个不同的问题。让我们按照您要求的顺序来处理它们:

如果我添加一个使用另一个包的包怎么办?这个包是否也自动下载和加载?还是一般禁止 R 包使用另一个包?

当然不禁止一个 R 包使用另一个 R 包。事实上,大多数 R 包都依赖于其他包。

每个 R 包的源代码必须DESCRIPTION在根目录中包含一个基于文本的文件。在此文件中,您将找到(除其他外)一个“Depends”字段和一个“Imports”字段。这两个字段一起列出了使用此包所需的所有其他包。如果用户还没有在他们的本地库中安装这些其他包,R 将在安装请求的包时自动安装它们。

如果您的包在“Depends”中列出了一个依赖项,那么无论何时附加您的包,都会附加该依赖包。因此,如果您查看名为“foo”的包的源代码,您会看到它的DESCRIPTION文件包含以下行

Depends: bar,

你知道当你library(foo)在你的 R 控制台中调用时,你已经有效地完成了library(bar); library(foo)

这并不总是理想的。该包foo可能只需要来自 package 的几个函数bar,并且bar可能包含一些其他函数,其名称可能与其他常用函数发生冲突。因此,一般来说,如果您正在编写一个包并且只想使用另一个包中的一些功能,那么最好使用“Imports”而不是“Depends”来限制添加到用户的不必要符号的数量搜索路径。


假设我想发布一个 R 包。在我的代码中,我可以使用其他包中的函数并安装和加载这些包吗

是的,您可以使用其他软件包中的功能。最简单的方法是在文件Depends字段中包含包的名称DESCRIPTION

但是,当仅在您自己的包中使用来自另一个包的几个函数时,最佳实践是使用DESCRIPTION文件中的“Imports”字段,并在实际 R 代码中为导入的函数使用命名空间限定符。例如,如果你想ggplotggplot2包中使用,那么在你的函数中你会调用它ggplot2::ggplot而不仅仅是ggplot.

install.packages如果你发布你的包供其他人使用,如果用户使用默认设置调用,依赖项将与你的包一起自动安装。例如,当我这样做时:

install.packages("fGarch")

我收到了相关消息:

#> also installing the dependencies ‘timeSeries’, ‘fBasics’, ‘fastICA’

我是否必须实现需要这个和那个包的消息,并且用户必须在它之前安装和加载它,并且我需要实现错误捕获功能,以防在 pc 系统上找不到包?

不,一般不会。只要您在DESCRIPTION文件中列出了正确的包,R 就会处理这个问题。


当我想发布一个 R 包时,我可以在我的包/代码中使用/调用 Java 代码吗?

R 没有本机 Java API,但您可以通过rJava 包使用自己的 Java 代码,您可以将其列为包的依赖项。但是,有一些用户很难让 Java 运行,例如商业和学术用户,他们可能使用 R 但没有安装 Java 并且没有安装它的管理员权限,所以在编写时要牢记这一点一袋。


对于一个已经发布的包——让我们以 fGarch 包为例——我想看看完整的代码。我怎么能看到这个?

可从 CRAN 下载的每个软件包都有其可用的源代码。在 的情况下fGarch,它的CRAN 页面包含一个指向源代码压缩包的链接。您可以下载它并untar在 R 中使用来查看所有源代码。或者,许多包将在 Github 或其他源代码控制站点上有一个很容易找到的存储库,您可以在其中通过浏览器检查源代码。例如,您可以在此处浏览 Github 上的 fGarch 源代码。


对于已经发布的包,是否可以查看并查看所有提交的文件?因此,就像提交所有文件的 git 一样的存储库 - 代码本身和需要的其他文件,如描述文件或其他文件 - 我可以看到这些文件并查看它们吗?

是的,您可以在此处的非官方 Github CRAN 镜像中查看上传到 Github 上 CRAN 的所有包的所有源文件


R 包中是否有我作为最终用户看不到的代码?这也指的是我之前的问题,我如何或以哪种方式可以看到 R 包中的整个代码?

如上所述,您可以通过 CRAN 或 Github 获取任何包的源代码。正如您所说,您只需在 R 中键入该函数的名称即可查看导出函数的源代码。对于未导出的函数,您可以使用三个冒号来执行相同的操作。例如,允许您从 中查看未导出函数的ggplot2:::adjust_breaks函数体。当使用像 S4、ggproto 或 R6 这样的面向对象系统时,或者当源代码包含已编译的 C 或 C++ 代码时,会有一些复杂性,但我还没有遇到过我无法找到使用 R 控制台和良好的搜索引擎在一两分钟后获得相关源代码。adjust_breaksggplot2


推荐阅读