最高の新しいパッケージを提供するためにRを頻繁に更新するのが好きですが、cronスケジュールでのRスクリプトに問題があるようです。
Ubuntuアップデーターがr-baseパッケージを更新するたびに、スクリプトを実行しようとすると、「there is no library(XML)
」のようなメッセージが表示されます。
次に、「update.packages("XML")
」に移動して、新しいバージョンのRと互換性のあるそのパッケージの新しいバージョンを取得する必要があります。
私はたくさんのパッケージをインストールしているので、かなり定期的にそれらを追跡し、 "update.packages(c("XML", "ggplot2", "timeseries"))
"のような長いコマンドを作成しています。
更新後にこれを忘れると、すべてのR cronスクリプトが失敗します。
すでにインストール済みのパッケージを自動的にチェックし、更新が必要なときにそれらを更新するための優れたワークフローを持っている人はいますか?
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で動作しないパッケージは持ち込まないように、さらに注意が必要です。