加载all和build&重装

时间:2017-10-13 07:25:38

标签: r rstudio r-package

Load All命令和Build& amp;使用包时,在RStudio中重新加载命令?

我现在的主要工作流程是合并我所构建的软件包的当前更改,以便我可以在不同的RStudio会话中实际使用我的计算机上的最新功能。

1 个答案:

答案 0 :(得分:1)

我一直在探索这种工作流程,并会使用您的问题来记录我发现的内容。

案例1:同一会话中的Pkg和代码

在RStudio中选择文件/新项目...新目录/ R包。将定义函数库的脚本放在R目录中。将任何打开的代码放在别处(例如,在名为&#34的子目录中;脚本")。使用dev_tools::load_all(Ctrl-Shift-L)将R目录中定义的任何对象加载到当前会话中。这适用于简单的对象,并避免较慢的Build&重新加载循环。

如果您喜欢在此模式下工作,请认识到任何构建操作都将复制许多这些文件。对于代码来说,这很好但是如果你在一个子目录中有大型数据文件,它可能会很慢构建并消耗大量存储空间。如果更合适,请考虑将它们放在Build中或项目外部忽略的目录中。

Build in RStudio的一个不错的副作用是你可以为所有对象构建文档。我们仍然可以通过运行roxygen2::roxygenise()来安装软件包来完成此操作。

案例2:单独会话中的Pkg和代码

如果您拥有可能由不同项目使用的功能,但您需要返回并编辑其中一个软件包,则会发生这种情况。

在第一个会话中,假设我们加载一个名为" greetings"的包。使用RStudio执行此操作,它将定义一个" hello world"功能:hello()。运行Build&重新加载以在本地包库中安装此包。打开第二个会话以确认您可以调用此功能:

greetings::hello()
#> "Hello, world!"

在第一个会话中,修改greetings::hello()以改为说再见。建设与发展重新加载(Ctrl + Shift + B)以将更改安装到包库中。第二场会议没有获得改变:

greetings::hello()
#> "Hello, world!"

devtools:reload()没有帮助,因为如果没有附加包,它会以静默方式退出:

reload(inst("greetings"))
greetings::hello()
#> "Hello, world!"

但是,我发现这个组合将在第二个会话中获取更改:

unload(inst("greetings"))
reload(inst("greetings"))
greetings::hello()
#> "Goodbye, cruel world!"

因此,案例2中的开发存在一些局限性。