web-dev-qa-db-ja.com

R-クラン更新に関連するRモジュールを更新するための良いワークフロー?

最高の新しいパッケージを提供するためにRを頻繁に更新するのが好きですが、cronスケジュールでのRスクリプトに問題があるようです。

Ubuntuアップデーターがr-baseパッケージを更新するたびに、スクリプトを実行しようとすると、「there is no library(XML)」のようなメッセージが表示されます。

次に、「update.packages("XML")」に移動して、新しいバージョンのRと互換性のあるそのパッケージの新しいバージョンを取得する必要があります。

私はたくさんのパッケージをインストールしているので、かなり定期的にそれらを追跡し、 "update.packages(c("XML", "ggplot2", "timeseries"))"のような長いコマンドを作成しています。

更新後にこれを忘れると、すべてのR cronスクリプトが失敗します。

すでにインストール済みのパッケージを自動的にチェックし、更新が必要なときにそれらを更新するための優れたワークフローを持っている人はいますか?

3
Mittenchops

Cronスクリプトにinstall.packages()呼び出しを追加して、残りのR cronジョブを実行する前に、現在のすべてのパッケージをインストールすることができます。

_install.packages_はベクターを使用するため、他の場所にインストールするパッケージを含むファイルを保持し、cron更新スクリプトに自動的にロードすることもできます。

installed.packages()は、すでにインストールされているパッケージのベクトルを返すため、_%in%_を使用して、まだインストールされていないパッケージで呼び出すことができます。

_desired.packages <- c("plyr","taRifx","ggplot2")
missing.packages <- ! desired.packages %in% installed.packages()[,1]
if( any(missing.packages) ) { 
   install.packages( desired.packages[missing.packages] )
}
_

編集:おそらくより良い解決策

@JoshuaUlrichの チャットでの提案 によると:

これを.Rprofileに配置します。

_local({
  .libPaths("/home/evilgenius/R/library")
})
_

その後、Ubuntuがすべてをワイプした後、update.packages()を実行するだけで、君主制が復元されます。

このソリューションでは、現在のバージョンのRで動作しないパッケージは持ち込まないように、さらに注意が必要です。

4
Ari B. Friedman