【发布时间】:2015-12-25 08:45:48
【问题描述】:
我正在为自定义包创建新函数,我们称之为customR。在NAMESPACE 中,我们导入了许多其他包以在customR 中使用。在开发新功能时,我想要一种简单而健壮的方式来加载customR 导入的所有包。
当然,我可以简单地使用library 来手动在customR 的NAMESPACE 中加载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)
虽然我没想到它会起作用,但我尝试了loadNamespace 和requireNamespace,当我使用search() 时,它们没有显示导入的包,所以它们似乎不起作用。
需要明确的是,在正常情况下加载customR 时,我不想attach 这些包。相反,在开发过程中,我只是希望能够在为customR 开发新功能时临时快速、简单、健壮地attach 使用imported 的所有包。
【问题讨论】:
-
它们是否在“描述”文件的“导入”字段中?如果是这样,那么在您开发它时加载您的 customR 包应该可以正常工作。我使用 devtools 包和 RStudio 进行开发,它对此非常有用。当你想处理包时,只需使用
load_all()。 -
感谢@RichardScriven,是的,它们在
DESCRIPTION文件中。我实际上尝试过devtools::load_all()。让我再试一次,也许我只是错过了它加载了所有imported 包。 -
@RichardScriven 我又试了一次,
devtools::load_all('path/to/customR')没有加载customR的DESCRIPTION文件的Imports:部分下的任何包。 -
您将加载与附加混淆了。命名空间可以在不附加到搜索路径的情况下加载。这正是 Imports 所做的。
library不只是加载;它加载并附加。 -
@JoshuaUlrich 谢谢。回顾我的问题,我可以看到我混淆了功能/操作。我已经编辑了这个问题,希望能澄清我的目标。在使用
library(customR)或devtools::load_all(customR)时,我想将attach所有Imported软件包根据需要 不作为默认操作。本质上,我正在寻找类似attach_all_imported_packages(customR)的东西。如果还不清楚,请告诉我。