R 全部加载和生成之间的差异&;重新加载

R 全部加载和生成之间的差异&;重新加载,r,rstudio,r-package,R,Rstudio,R Package,使用包时,RStudio中的Load All命令和Build&Reload命令有什么区别 我现在的主要工作流程是合并我正在构建的包的当前更改,以便我可以在不同的RStudio会话中实际使用我机器上的最新功能。我一直在探索这种工作流,并将使用您的问题记录我的发现 案例1:同一会话中的程序包和代码 在RStudio中选择文件/新项目。。。新目录/R包。将定义函数库的脚本放在R目录中。将任何打开的代码放在别处(例如,在名为“scripts”的子目录中)。使用dev_tools::load_all(Ct

使用包时,RStudio中的Load All命令和Build&Reload命令有什么区别


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

我一直在探索这种工作流,并将使用您的问题记录我的发现

案例1:同一会话中的程序包和代码

在RStudio中选择文件/新项目。。。新目录/R包。将定义函数库的脚本放在R目录中。将任何打开的代码放在别处(例如,在名为“scripts”的子目录中)。使用
dev_tools::load_all
(Ctrl-Shift-L)将R目录中定义的任何对象加载到当前会话中。这适用于简单对象,并避免了较慢的构建和重新加载周期

如果您喜欢在这种模式下工作,请认识到任何生成操作都将生成许多这些文件的副本。对于代码来说,这很好,但如果子目录中有大型数据文件,则构建速度可能会很慢,并且会占用大量存储空间。考虑把它们放在一个目录中,如果是比较合适的话,在构建或项目之外完全忽略。 内置RStudio的一个很好的副作用是,您可以为所有对象构建文档。通过运行
roxygen2::roxygenise()
,我们仍然可以在不安装软件包的情况下执行此操作

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

当您有可能由不同项目使用的函数,但需要返回并编辑其中一个包时,就会发生这种情况

在第一个会话中,假设我们加载一个名为“问候”的包。如上所述使用RStudio执行此操作,它将定义一个“hello world”函数:
hello()
。运行Build&Reload在本地包库中安装此包。打开第二个会话以确认您可以调用此函数:

greetings::hello()
#> "Hello, world!"
在第一个会话中,修改
问候语::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中的开发有一些局限性