我猜你在这里有几个不同的问题。让我们按照您要求的顺序来处理它们:
如果我添加一个使用另一个包的包怎么办?这个包是否也自动下载和加载?还是一般禁止 R 包使用另一个包?
当然不禁止一个 R 包使用另一个 R 包。事实上,大多数 R 包依赖其他包。
每个 R 包的源代码必须在根目录中包含一个基于文本的 DESCRIPTION 文件。在此文件中,您将找到(除其他外)一个“Depends”字段和一个“Imports”字段。这两个字段一起列出了使用 this 包的所有其他包必需。如果用户还没有在他们的本地库中安装这些其他包,R 将在安装请求的包时自动安装它们。
如果你的包在“Depends”中列出了一个依赖项,那么每当你的包被附加时,依赖包就会被附加。因此,如果您查看名为“foo”的包的源代码,您会发现它的 DESCRIPTION 文件包含以下行
Depends: bar,
您知道,当您在 R 控制台中调用 library(foo) 时,您实际上已经完成了 library(bar); library(foo)
这并不总是理想的。包foo 可能只需要包bar 中的几个函数,而bar 可能包含一些其他函数,其名称可能与其他常用函数发生冲突。因此,一般来说,如果您正在编写一个包并且只想使用另一个包中的几个函数,那么最好使用“Imports”而不是“Depends”来限制添加到用户的不必要符号的数量搜索路径。
假设我想发布一个 R 包。在我的代码中,我可以使用其他包中的函数并安装和加载这些包吗
是的,您可以使用其他软件包中的功能。最简单的方法是在 DESCRIPTION 文件的 Depends 字段中包含包的名称。
但是,当在您自己的包中仅使用来自另一个包的几个函数时,最佳做法是使用 DESCRIPTION 文件中的“Imports”字段,并在您的实际 R 代码中为导入的函数使用命名空间限定符.例如,如果您想使用 ggplot2 包中的 ggplot,那么在您的函数中,您可以将其命名为 ggplot2::ggplot 而不仅仅是 ggplot。
如果你发布你的包供其他人使用,如果用户使用默认设置调用install.packages,依赖项将与你的包一起自动安装。例如,当我这样做时:
install.packages("fGarch")
我收到了相关消息:
#> also installing the dependencies ‘timeSeries’, ‘fBasics’, ‘fastICA’
我是否必须实现一个消息,表明需要这个和那个包,并且用户必须在它之前安装和加载它,并且我需要实现错误捕获功能,以防在电脑系统?
不,一般来说不是。只要您在 DESCRIPTION 文件中列出了正确的包,R 就会处理这个问题。
当我想发布一个 R 包时,我可以在我的包/代码中使用/调用 Java 代码吗?
R 没有本机 Java API,但您可以通过 rJava package 使用自己的 Java 代码,您可以将其列为包的依赖项。但是,有一些用户很难让 Java 运行,例如商业和学术用户,他们可能使用 R 但没有安装 Java 并且没有安装它的管理员权限,所以在编写时要牢记这一点一个包。
对于一个已经发布的包 - 所以让我们以 fGarch 包为例 - 我想看看完整的代码。我怎么能看到这个?
可从 CRAN 下载的每个软件包都有可用的源代码。对于fGarch,它的CRAN page 包含一个指向源代码压缩包的链接。你可以下载这个并在 R 中使用untar 来查看所有源代码。或者,许多包将在 Github 或其他源代码控制站点上有一个很容易找到的存储库,您可以在其中通过浏览器检查源代码。例如,您可以在 Github here 上浏览 fGarch 源代码。
对于已经发布的包,是否可以查看和查看所有提交的文件?因此,就像提交所有文件的 git 存储库一样 - 代码本身和所需的其他文件,如描述文件或其他文件 - 我可以看到这些文件并查看它们?
是的,您可以在非官方的 Github CRAN 镜像here 上查看上传到 Github 上 CRAN 的所有包的所有源文件@
R 包中是否有我不能作为最终用户看到的代码?这也指的是我之前的问题,我如何或通过哪种方式可以看到 R 包中的整个代码?
如上所述,您可以通过 CRAN 或 Github 获取任何包的源代码。正如您所说,您只需在 R 中输入函数的名称即可查看 exported 函数的源代码。对于未导出的函数,您可以使用三个冒号执行相同操作。例如,ggplot2:::adjust_breaks 允许您从ggplot2 中查看未导出函数adjust_breaks 的函数体。当使用像 S4、ggproto 或 R6 这样的面向对象系统时,或者当源代码包含已编译的 C 或 C++ 代码时,会有一些复杂性,但我还没有遇到我无法找到的情况使用 R 控制台和良好的搜索引擎在一两分钟后获得相关源代码。