2

これは、コードの再現性に関する便宜上の問題です。さまざまなタイミングで (たとえば、マークダウン ドキュメントのさまざまなセクションで) さまざまなカスタム ライブラリが呼び出される長いコードになるか、または長いコードを受け取る可能性があります。不十分に構成されたドキュメントがあるとします。

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])

もちろん、スクリプトからすべてのライブラリ関数を見つけることは可能ですが、独自のスクリプトを構成するため、または作成が不十分な他のスクリプトを更新するために、これを自動化することをお勧めします。

4

1 に答える 1

1

これは、私が共同で作成した 2 つのパッケージを使用したアプローチです (呼び出しを取得するためのqdapRegexと、他のユーザーがスクリプトを実行しやすくするための pacman) :library

最初に、あなたの例を使用して偽の.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を使用してlibraryor呼び出しを取得でき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これにより、最小バージョンがインストールされていることが確認されます。

于 2015-03-20T15:29:48.693 に答える