Andrew Gelmanは最近、Rの簡単なアップグレードプロセスがないことを嘆いていました (おそらくLinuxよりもWindowsの方が適切です)。ソフトウェアのインストールからすべての設定/パッケージのコピーまで、アップグレードを行うための良いトリックはありますか?
この提案はコメントに含まれており、最近使用したものです。最初に新しいバージョンをインストールしてから、古いバージョンでこれを実行します。
#--run in the old version of R
setwd("C:/Temp/")
packages <- installed.packages()[,"Package"]
save(packages, file="Rpackages")
新バージョンではこれが続きます:
#--run in the new version
setwd("C:/Temp/")
load("Rpackages")
for (p in setdiff(packages, installed.packages()[,"Package"]))
install.packages(p)
完全を期すために、この問題を防ぐにはいくつかの方法があります。ダークが言ったように、コンピューター上の別のディレクトリにパッケージを保存します。
_install.packages("thepackage",lib="/path/to/directory/with/libraries")
_
関数_.Library
_を使用して、デフォルトの_.libPaths
_値を変更することもできます
_.libPaths("/path/to/directory/with/libraries")
_
これにより、このパスが_.Library
_変数の最初の値として設定され、デフォルトになります。
これをさらに自動化する場合は、Rビルドの/ etc /ディレクトリにあるRprofile.siteファイルでこれを指定できます。そうすると、Rがロードされるたびに自動的にロードされ、それ以上心配する必要はありません。指定したディレクトリからパッケージをインストールしてロードするだけです。
最後に、Rprofile.siteにいくつかの小さなコードが含まれており、新しいRバージョンをインストールするときにすべてのパッケージを再インストールできます。それらをリストアップするだけですbefore新しいRバージョンに更新します。すべてのパッケージの更新されたリストを含む.RDataファイルを使用してそれを行います。
_library(utils)
## Check necessary packages
load("G:\Setinfo\R\packagelist.RData") # includes a vector "pkgs"
installed <- pkgs %in% installed.packages()[, 'Package']
if (length(pkgs[!installed]) >=1){
install.packages(pkgs[!installed])
}
_
Rprofile.siteで.Last()
を指定してpackagelist.RDataを作成します。いくつかをインストールすると、パッケージリストが更新されます。
_.Last <- function(){
pkgs <- installed.packages()[,1]
if (length(pkgs) > length(installed)){
save(pkgs,file="G:\Setinfo\R\packagelist.RData")
}
}
_
新しいRバージョンをインストールするとき、必要な要素をRprofile.siteファイルに追加するだけで、すべてのパッケージが再インストールされます。とにかくRprofile.siteを調整する必要があります(合計コントラストを使用して、Tinn-Rの追加コードを追加するなど)。実際には余分な作業ではありません。すべてのパッケージを新たにインストールするのに余分な時間がかかります。
この最後のビットは、ソリューションとして元の質問で与えられたものと同等です。最初に「インストール済み」リストを取得することを心配する必要はありません。
繰り返しますが、CRANからインストールされていないパッケージがある場合、これは問題なく機能しません。ただし、このコードは、これらのコードも含めるように簡単に拡張できます。
これはもちろん古い質問ですが、私が見つけた新しい簡単な答え(Windowsのみで機能する)があるかもしれません。
install.packages("installr")
require(installr)
updateR()
これを行う最良の方法は、RGuiシステムからです。すべてのパッケージが新しいフォルダーに転送され、古いパッケージが削除または保存されます(どちらかを選択できます)。その後、RStudioを再度開くと、更新されたバージョンを使用していることがすぐに認識されます。私にとってこれは魅力のように働いた、
サイモン
2つの簡単な提案:
Gaborの batchfiles を使用します。これは、たとえばこの一括ライブラリ再配置。警告:私はそれらを使用していません。
インストールされたRバージョンの「ファイルツリー」内にライブラリをインストールしないでください。 Windowsでは、RをC:/ opt/R/R- $ versionに入れることができますが、最初の問題を軽減するために、次のスニペットを使用してすべてのライブラリをC:/ opt/R/library /に入れます。
$ cat .Renviron # this is using MSys/MinGW which looks like Cygwin
## Example .Renviron on Windows
R_LIBS="C:/opt/R/library"
CRAN以外のパッケージを使用している場合、上記の方法は完全には機能しません。たとえば、個人パッケージまたは非CRANサイトからダウンロードされたパッケージ。
Windowsでの私の好みの方法(2.10.1から2.11.0へのアップグレード):
R-2.10.0/library/*
_を_R-2.11.0/library/
_にコピーしますupdate.packages()
を実行します質問で示された解決策に関して、新しいバージョンを既にインストールしている場合、古いバージョンのRを実行するのは簡単ではないかもしれません。この場合、次のようにして、以前のRバージョンから欠落しているすべてのパッケージを再インストールできます。
_# Get names of packages in previous R version
old.packages <- list.files("/Library/Frameworks/R.framework/Versions/3.2/Resources/library")
# Install packages in the previous version.
# For each package p in previous version...
for (p in old.packages) {
# ... Only if p is not already installed
if (!(p %in% installed.packages()[,"Package"])) {
# Install p
install.packages(p)
}
}
_
(コードの最初の行のlist.files()
への引数は、以前のRバージョンのライブラリディレクトリへのパスであることに注意してください。以前のバージョンのパッケージのすべてのフォルダがあります。は_"/Library/Frameworks/R.framework/Versions/3.2/Resources/library"
_です。これは、以前のRバージョンが3.2でない場合、またはWindowsを使用している場合は異なります。)
if
ステートメントは、次の場合にパッケージがnotにインストールされていることを確認します
for
ループの前の反復でインストールされたパッケージからの依存関係としてインストールされています。Dirkの提案に従って、Windows上でそれを行うためのいくつかのRコードがあります。 Windows XPでRを簡単にアップグレードする方法
更新(15.04.11): Windows 7でRをアップグレードする の一般的な問題に対処する方法を説明する、このテーマに関する別の投稿を書きました
2つのオプション:
.libPaths("C:/R/library")
私はWindows 8を使用していますが、奇妙な理由により、インターネット接続を使用してパッケージをインストールすることはできません。
通常、CRANの.Zipファイルを使用してインストールします。
R 3.2.5からR 3.3.1に移行した後。
私は単にパッケージをからコピーしました
C:\Path\to\packa\R\win-library\3.2
からC:\Path\to\packa\R\win-library\3.3
。
そして、Rセッションを再開しました。完璧に働きました。すべてのパッケージが正常に機能しているかどうかは確認していません。しかし、私がチェックしたものは完全にうまく機能しています。このハックがすべての人に役立つことを願っています。
乾杯。
あなたが先見性があれば受け入れられた答えはうまくいくかもしれませんが、私はすでに古いバージョンを取り除いていたので、これらの指示に従うことができませんでした。以下で説明する手順は、OSXの2.1および3.1からのアップグレードで機能しました。
更新:(3.1または3.2を入力する代わりに)最新バージョンのディレクトリを取得するには、以下のコマンドを使用できます。 2番目のものは、R変数に直接変換し、.
と..
と.DS_Store
をスキップして、以下を使用します。
OLD=$(ls -d /Library/Frameworks/R.framework/Versions/*.* |tail -n 2 | head -n 1)Resources/library/
echo "packages = c(\"`ls $OLD | tail +4| paste -s -d ',' - | sed -E 's|,|\",\"|'g`\")" | tr -d "/"
(|pbcopy
を最後に追加して、Macクリップボードに直接コピーします)
次に、[〜#〜] r [〜#〜]内で、生成された変数を貼り付けることができます。 Rの新しいバージョンで定義されると、上記の手順からインストール済みパッケージをループできます...
for (p in setdiff(packages, installed.packages()[,"Package"]))
install.packages(p, dependencies=TRUE, quiet=TRUE, ask=FALSE)
linux
+ bash
+ debian
+ apt
ユーザー:
R
の最新バージョンにインストール/アップグレードする場合は、root
権限があると仮定できます。 (必須ではありません。プロセスを単純化するだけです。一貫性を保つため、以下のスクリプトはallインストールにSudo
を使用しています。)R
パッケージもroot
によってインストールされるため、許可されますこれらを/usr/local/
に配置します。
以下のcurl
の呼び出しは、sid
のR
リリース、非常に最新のunstableバージョン(R
パッケージのビルド/チェック時に必要)に既に興味があることを前提としています。
cat /etc/apt/sources.list | grep 'sid' || exit 1
ただし、これは最近の安定したリリースに簡単に置き換えることができます。 buster
。
私はnotであり、keyをそのまま使用していることに注意してください 通常推奨 。特に(次のスクリプトのように)パッケージwithinR
自体(以下のRscript -e
)をインストールする場合、これは必須ではありません。また、このようなキーは数年ごとに破損/変更される傾向があります。したがって、次の序文をファイルR.sh
に追加してください。
Sudo apt-key adv --keyserver keyserver.ubuntu.com \ --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
array
packagesのR
は明らかに網羅的ではありませんが、私が個人的に役立つと思う例をいくつか示します。 debian
パッケージ r-recommended
を使用した新規インストール/アップグレードでは、以下のように、すべての標準「推奨」パッケージの最新バージョンが提供されます(例:survival
)。 CRANのリリースと関連するdebian
パッケージの更新との間にわずかな遅れがあると思います。したがって、「推奨」array
パッケージの最新バージョンが必要な場合は、これらの一部を以下のR
に追加することをお勧めします。
以下のプロセスでインストールされるdebian
packagesも必須ではありません(r-base
を使用するため)、網羅的でもありません。合理的ないいえのために重要である「アドオン」のR
個のパッケージ。
とにかく... R.sh
に次を配置します。
Sudo apt update && Sudo apt --yes full-upgrade
Sudo apt install --yes libappstream4 curl
### ov1 = online version; lv1 = local version (i.e. currently installed)
ov1=$(curl --silent --url https://packages.debian.org/sid/r-base |
grep 'meta name=\"Keywords\"' |
grep --only-matching '[0-9].*[0-9]') ; echo $ov1
## command -v = print a description of COMMAND similar to the `type' builtin
## && = if prior command succeeds, then do; || = if prior fails, then do
command -v 'R --version' &&
lv1=$(R --version |
grep --only-matching '[0-9\.]*[0-9]' |
## || = otherwise
head -1) ||
lv1=0
## 'lt' = less than
if dpkg --compare-versions "$lv1" 'lt' "$ov1"
then ## declare -a = indexed array
declare -a deb1=('r-base' 'r-base-dev' 'r-recommended')
for i in "${deb1[@]}"
do Sudo apt install --yes "$i"
done
fi
### certain Debian packages are required by 'R' so best have these first
Sudo apt install --yes ccache libcairo2-dev libxml2-dev libcurl4-openssl-dev \
libssl-dev liblapack-dev libssl-dev
declare -a pkg1=('data.table' 'ggplot2' 'knitr' 'devtools' 'roxygen2')
## installing as 'root' so these are installed in
Rscript -e ".libPaths()[1]"
for i in "${pkg1[@]}"
do Sudo Rscript -e "install.packages('$i', dependencies=TRUE)"
done
### other useful additions
Sudo apt install --yes libblas-dev libboost-dev libarmadillo-dev \
jags pandoc pandoc-citeproc
Sudo apt update && Sudo apt full-upgrade
次に、それを実行します、例えばすでにディレクトリにあると仮定すると:source R.sh
。
パッケージのインストール(debian
またはR
)シェルからのループでの1つ1つはやや非効率的ですが、エラーのより単純なトレースを可能にします。に応じて時間がかかる場合があります。 R
パッケージであるため、一晩実行するのが最も簡単かもしれません...
私にとってこのページは良いです https://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ または別のオプションは、新しいオプションをインストールするだけです。最後に、たとえば、私のPCのウィンドウに入れます
.libPaths(c( "D:/Documents/R/win-library/3.2"、 "C:/ Program Files/R/R-3.2.3/library"、 "C:/ Program Files/R/R-3.2 .0/library "、" D:/Documents/R/win-library/2.15 ")
私の場合、最後のバージョンのすべてのパスは常に最初のパスを「D:/Documents/R/win-library/3.2」に固定し、次にパッケージをコピーまたは移動する必要がないため、もう一方を配置します私のサジェストはただそれを呼ぶ