Rの新しいバージョンを簡単にインストールできますか?
質問
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")
.libPaths
関数も使用して、デフォルトの .Library
値を変更できます
.libPaths("/path/to/directory/with/libraries")
これにより、このパスが .Library
変数の最初の値として設定され、デフォルトになります。
これをさらに自動化する場合は、Rビルドの/ etc /ディレクトリにあるRprofile.siteファイルでこれを指定できます。そうすると、Rがロードされるたびに自動的にロードされ、それ以上心配する必要はありません。指定したディレクトリからパッケージをインストールしてロードするだけです。
最後に、Rprofile.siteに小さなコードが含まれており、新しいRバージョンをインストールするときにすべてのパッケージを再インストールできます。新しい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のバッチファイルを使用します。この一括ライブラリ再配置。警告:使用していません。
-
インストールされた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.11.0をインストール
-
R-2.10.0 / library / *
をR-2.11.0 / library /
にコピー
- 回答「いいえ」上書きしてもよいかどうかを尋ねるプロンプトに。
- R 2.11.0を開始
- Rコマンド
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バージョンのライブラリディレクトリへのパスであることに注意してください私の現在の場合、これは&quot; /Library/Frameworks/R.framework/Versions/3.2/Resources/library"
です。これは、以前のRバージョンが3.2でない場合、またはWindowsを使用している場合。)
if
ステートメントは、次の場合にパッケージがインストールされないことを確認します
- すでに新しいRバージョンにインストールされている、または
-
for
ループの以前の反復でインストールされたパッケージからの依存関係としてインストールされました。
Dirkの提案に続いて、Windowsでそれを行うためのRコードを以下に示します。 Windows XPでRを簡単にアップグレードする方法
更新(15.04.11):このテーマに関する別の投稿を書いて、 Windows 7でのRのアップグレード
2つのオプション:
- 私の回答を実装するこちら
- EclipseでStatETでRを使用する場合、実行構成を開き、コンソールタブをクリックし、起動後に実行されるRスニペットというボックスをクリックします選択したディレクトリに次の行を追加します:
.libPaths(&quot; C:/ R / library&quot;)
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番目は、。
と ..
と .DS_Store
をスキップして、R変数に直接変換します。使用方法:
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)
私にとってこのページは良い https ://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ または 別のオプションは、新しいオプションをインストールするだけです。最後に、たとえば、私のPCのウィンドウに入れます
.libPaths(c( &quot; D:/Documents/R/win-library/3.2" ;, &quot; C:/ Program Files / R / R-3.2.3 / library&quot ;, &quot; C:/ Program Files / R / R-3.2.0 / library&quot ;, &quot; D:/Documents/R/win-library/2.15" )
私の場合、最後のバージョンのすべてのパスは、常に最初のパスを「D:/Documents/R/win-library/3.2」に置きます。それは修正されました そして、パッケージをコピーしたり移動したりする必要がないため、もう一方を置きます。
linux
+ bash
+ debian
+ apt
ユーザー:
-
R
の最新バージョンをインストール/アップグレードする場合、root
の権限を持っているとみなされます。 (必須ではありません。プロセスをずっと単純にします。一貫性を保つために、以下のスクリプトは all インストールにsudo
を使用します。)R
パッケージもroot
によってインストールされるため、これらを/ usr / local /
に配置することは許可されています。 -
以下の
curl
の呼び出しは、最新のであるR
のsid
リリースに既に興味があることを前提としています。不安定なバージョン(R
パッケージのビルド/チェック時に必要)すなわちcat /etc/apt/sources.list | grep 'sid' || exit 1
これは最近の安定版リリースで簡単に置き換えることができますが、
buster
。 -
= "https://www.digitalocean.com/community/tutorials/howと同様に、キーを使用していない ことに注意してください-to-install-r-on-ubuntu-18-04 "rel =" nofollow noreferrer ">通常推奨。特に(次のスクリプトのように)パッケージを
R
自体(以下のRscript -e
)にインストールする場合、これは必須ではありません。また、このようなキーは数年ごとに破損/変更される傾向があります。したがって、次の序文をファイルR.sh
に追加することはもちろん歓迎されます。sudo apt-key adv --keyserver keyserver.ubuntu.com \ --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
-
R
パッケージのarray
は明らかに網羅的ではありませんが、私が個人的に役立つと思う例をいくつか示します。debian
パッケージを使用した新規インストール/アップグレードr-recommended
は、以下のように、標準の「推奨」パッケージすべての最新バージョンを提供する必要があります(例:survival
)。 CRANのリリースと、関連するdebian
パッケージの更新との間にわずかな遅れがあると思います。したがって、「推奨」R
パッケージの最新バージョンが必要な場合は、これらの一部を以下のarray
に追加することをお勧めします。 -
以下のプロセスでインストールされる
debian
パッケージも必須ではありません(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
パッケージであるため、一晩実行するのが最も簡単かもしれません...