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