这是代码再现性方便的问题。您可能会在不同时间(例如,在降价文档的各个部分中)调用各种自定义库,从而结束或接收长代码。假设您的文档构造不良:
library(ggplot2)
# lots of lines of code
# and then more packages invoked, using both commands just spice things up
require(igraph)
# lots of lines of code
library(pracma)
# lots of lines of code
# etc
是否有可能从代码中检索所有这些实例的函数,并将它们存储为例如列表?
然后,您可以更新脚本以包含注释行,以用作在不同工作区中工作的任何人的参考。
# To run this script first check if all libraries are installed and up to date.
# install.packages([results_of_an earlier_check])
当然可以从脚本中找到所有的库函数,但是自动化这个函数会更好,无论是构建自己的脚本还是更新不好的其他脚本。
答案 0 :(得分:1)
这是一种方法,使用我共同撰写的两个软件包( qdapRegex 来抓取library
次调用& pacman ,以便让其他人更轻松地编写脚本运行):
首先,我将使用您的示例制作一个假的.Rmd文件,以便它更像您真正拥有的
temp <- paste(readLines(n=8), collapse="\n")
library(ggplot2)
# lots of lines of code
# and then more packages invoked, using both commands just spice things up
require(igraph)
# lots of lines of code
library(pracma)
# lots of lines of code
# etc
cat(temp, file="delete_me.rmd")
现在我们可以阅读并使用 qdapRegex 来抓取library
或require
来电。然后我们使用 pacman 使脚本完全可重现:
rmd <- readLines("delete_me.rmd")
library(qdapRegex)
packs <- rm_between(rmd, c("library(", "require("), c(")", ")"), extract=TRUE)
boot <- 'if (!require("pacman")) install.packages("pacman")'
cat(paste0(boot, "\npacman::p_load(", paste(na.omit(unlist(packs)), collapse=", "), ")\n"))
这会产生:
if (!require("pacman")) install.packages("pacman")
pacman::p_load(ggplot2, igraph, pracma)
您可以将其粘贴到代码标记中的脚本顶部,或使用哈希使脚本可重现。如果要确保加载包的最新版本,请使用:p_install_version
,以确保安装最小版本。