【问题标题】:How to attach (on an as needed basis) all packages imported by a package in R?如何附加(根据需要)由 R 中的包导入的所有包?
【发布时间】:2015-12-25 08:45:48
【问题描述】:

我正在为自定义包创建新函数,我们称之为customR。在NAMESPACE 中,我们导入了许多其他包以在customR 中使用。在开发新功能时,我想要一种简单而健壮的方式来加载customR 导入的所有包。

当然,我可以简单地使用library手动customRNAMESPACE 中加载imported 的每个包。但是,有很多包(下面的示例),我更喜欢一个更强大的解决方案,而不是简单地从 NAMESPACE 文件中复制下面的内容,然后用library 查找和替换import

import(data.table)
import(dplyr)
import(ensurer)
import(jsonlite)
import(lubridate)
import(magrittr)
import(mplyr)
import(reshape2)
import(scales)
import(stringr)
import(zoo)
importFrom(plyr,rename)

虽然我没想到它会起作用,但我尝试了loadNamespacerequireNamespace,当我使用search() 时,它们没有显示导入的包,所以它们似乎不起作用。

需要明确的是,在正常情况下加载customR 时,我不想attach 这些包。相反,在开发过程中,我只是希望能够在为customR 开发新功能时临时快速、简单、健壮地attach 使用imported 的所有包。

【问题讨论】:

  • 它们是否在“描述”文件的“导入”字段中?如果是这样,那么在您开发它时加载您的 customR 包应该可以正常工作。我使用 devtools 包和 RStudio 进行开发,它对此非常有用。当你想处理包时,只需使用load_all()
  • 感谢@RichardScriven,是的,它们在DESCRIPTION 文件中。我实际上尝试过devtools::load_all()。让我再试一次,也许我只是错过了它加载了所有imported 包。
  • @RichardScriven 我又试了一次,devtools::load_all('path/to/customR') 没有加载customRDESCRIPTION 文件的Imports: 部分下的任何包。
  • 您将加载与附加混淆了。命名空间可以在不附加到搜索路径的情况下加载。这正是 Imports 所做的。 library 不只是加载;它加载并附加。
  • @JoshuaUlrich 谢谢。回顾我的问题,我可以看到我混淆了功能/操作。我已经编辑了这个问题,希望能澄清我的目标。在使用library(customR)devtools::load_all(customR) 时,我想将attach 所有Imported 软件包根据需要 作为默认操作。本质上,我正在寻找类似attach_all_imported_packages(customR) 的东西。如果还不清楚,请告诉我。

标签: r package


【解决方案1】:

你能不能只制作一个新的 R 文件,例如。 custom.R,包含上述内容,并在需要使用时加载它。这样,您只需在制作自定义文件时使用一次库。这样,如果您更新任何包,您只需要重新运行源代码,它就会覆盖以前的库。

 source('custom.R')

【讨论】:

  • 我可以,但我正在寻找一种解决方案,它可以自动调整在customR 中作为imported 包添加/删除的任何包。
猜你喜欢
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 2022-01-25
  • 2019-01-31
  • 2023-03-18
  • 2016-01-19
相关资源
最近更新 更多