Rの新しいバージョンをインストールする簡単な方法は?


158

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)

1
ここで使用されているソリューションはどの程度最新ですか?
maj 2014年

私は最近それを使用し、素晴らしい仕事をしています。
Litwos、2015年

回答:


74

完全を期すために、この問題を回避する方法はいくつかあります。ダークが言ったように、パッケージをコンピューターの別のディレクトリに保存します。

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バージョンをインストールするときにすべてのパッケージを再インストールできるようにしています。新しい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からインストールされていないパッケージがある場合、これは問題なく機能しません。しかし、このコードはそれらのコードも含めるように簡単に拡張できます。


2
@プラサード:Thx。答えは少し古くなっていますが、R 2.12では、メインのRツリー外の標準ライブラリのどこかに自分でインストールしたパッケージがさらに自動的に保存されます。それで、あなたが今しなければならないのは、それがそれ自体で起こらなかった場合、そのライブラリを見つけてそれにリンクすることを確認することだけです。
Joris Meys、2011

@ 428790:あなたが言及しているライブラリはどこにありますか?
Daniel Krizian 2013年

@DanielKrizian内部オブジェクトのデフォルトを見てください.Library。私の場合、それは変わらない(私は特に嫌いいるが、ウェル)場合は、バックRのインストールフォルダを指す
ヨリスMeys

42

これはもちろん古い質問ですが、私が見つけた新しい簡単な答え(Windowsでのみ機能する)があるかもしれません。

install.packages("installr")
require(installr)
updateR()

これを行う最良の方法は、RGuiシステムからです。すべてのパッケージが新しいフォルダーに転送され、古いパッケージは削除または保存されます(どちらかを選択できます)。その後、RStudioを再度開くと、更新されたバージョンを使用していることがすぐに認識されます。私にとってこれは魅力のように働きました、

{installr}の詳細については、こちらをご覧ください

サイモン


2
githubを介してインストールされたパッケージはどうですか?
skan

8
これはWindows用であることに注意してください。
2016

27

2つの簡単な提案:

  1. このバルクライブラリの再配置などに役立つツールを構成すると言われているGaborのバッチファイルを使用してください。警告:私はそれらを使用していません。

  2. インストールされた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"

たとえばR 2.8からR.9にパッケージを転送すると問題が発生するのでしょうか。それとも、新しいバージョンでupdate.packagesを実行する限り、すべてが問題ないでしょうか?
Eduardo Leoni

私はこれをかなり長い間行っており、問題はありませんでした。Rは通常、「上位互換」です。また、IIRCでは1つのアップグレード(R 1.9-> R 2.0の可能性があります)のみで、すべてのライブラリの再構築が必要でした。
Dirk Eddelbuettel、2009

5
また、通常はライブラリフォルダを新しいインストールにコピーして、update.packagesを実行します。正常に動作するようです。ただし、オプションのインストールフォルダーの方がはるかにエレガントです。
kpierce8 2009

ちょうど指摘して
おき

25

CRAN以外のパッケージがある場合、上記の方法は完全には機能しません。たとえば、個人用パッケージまたはCRAN以外のサイトからダウンロードされたパッケージ。

Windowsでの私の推奨方法(2.10.1から2.11.0へのアップグレード):

  1. R-2.11.0をインストールする
  2. コピーR-2.10.0/library/*R-2.11.0/library/
  3. 上書きしてもよいかどうかを尋ねるプロンプトに「いいえ」と答えます。
  4. R 2.11.0を起動
  5. Rコマンドを実行する update.packages()

7

質問で与えられた解決策に関して、新しいバージョンをすでにインストールしている場合、古いバージョンの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ステートメントはパッケージがされていることを確認しますない場合はインストール

  • 新しいRバージョンに既にインストールされている、または
  • forループの以前の反復でインストールされたパッケージからの依存関係としてインストールされています。

これは私の問題を解決しました、ありがとう!この質問は少し馬鹿げているように聞こえるかもしれませんが、古いライブラリを削除できますか?
m_c 2017

4

ダークの提案に従い、Windowsでそれを行うためのRコードをいくつか示し ます。WindowsXPでRを簡単にアップグレードする方法

アップデート(15.04.11):この件に関する別の投稿を書いて、Windows 7でRアップグレードする際の一般的な問題に対処する方法を説明しました


2
Rの最新バージョンのTalには、installrこのプロセスを自動化する(現在はWindowsのみ)というパッケージがあります。r
Louis Maddox

1
C:\ Program Files \ R \ R-3.6.0 \ bin \ i386からRgui.exeを実行し、コードをコンソールに書き込みますinstall.packages(installr); library(installr); updateR(TRUE)。最後に、[1] TRUEが表示されます。Galiliの優れたパッケージにより、R 3.6.0からR 3.6.1に非常に簡単に合格しました。タルに感謝します。
Erdogan CEVHER

2

2つのオプション:

  1. 私の答えをここに実装してください
  2. StatETを使用してEclipseでRを使用する場合は、[ 実行構成 ]を開き、[ コンソール ]タブをクリックして、起動後にRスニペットを実行するボックスに次の行を選択したディレクトリで追加します。.libPaths("C:/R/library")

1

私はWindows 8を使用していますが、奇妙な理由で、インターネット接続を使用してパッケージをインストールすることはできません。

通常、CRANの.zipファイルを使用してインストールします。

R 3.2.5からR 3.3.1に移行した後。

パッケージをコピーしただけです

C:\Path\to\packa\R\win-library\3.2C:\Path\to\packa\R\win-library\3.3

その後、Rセッションを再開しました。完璧に働きました。すべてのパッケージが正常に機能しているかどうかは確認していません。しかし、私がチェックしたものは完全にうまく機能しています。このハックが誰にとってもうまくいくことを願っています。

乾杯。


1

あなたが先見の明があれば、受け入れられた答えはうまくいくかもしれませんが、私はすでに古いバージョンを取り除いていたので、これらの指示に従うことができませんでした。以下で説明する手順は、OSX 2.1および3.1からのアップグレードで機能しました。

更新:(3.1または3.2で入力する代わりに)最新バージョンのディレクトリを取得するには、以下のコマンドを使用できます。2つ目は、R変数に直接変換し、スキップ.して..and .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)

0

私にとってはこのページは良いです https://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ または別のオプションは新しいものをインストールするだけですオプションと最後に、たとえば私のPCのWindowsに

.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」に設定し、それを修正してから、パッケージをコピーまたは移動する必要がないため、私の提案はそれを呼び出すだけです


0

linux+ bash+ debian+ aptユーザー:

  1. 最新バージョンのをインストールまたはアップグレードRする場合は、root権限があると見なす場合があります。(必須ではありません。プロセスを単純化するだけです。一貫性を保つために、以下のスクリプトはすべてのインストールで使用さsudoれます。)パッケージもによってインストールされるため、これらをに配置することは許容されます。Rroot/usr/local/

  2. curl以下の呼び出しsidR、最新の不安定バージョンである(Rパッケージのビルド/チェック時に必要な)のリリースにすでに関心があることを前提としています。

    cat /etc/apt/sources.list | grep 'sid' || exit 1

    ただし、これは最近の安定版リリースなどと簡単に置き換えることができますbuster

  3. 通常推奨されるように、私はキーを使用していないことに注意してください。これは、特に(以下のスクリプトのように)パッケージそれ自体のにインストールする場合(以下)には特に重要ではありません。また、このようなキーは数年ごとに壊れる/変更される傾向があります。したがって、もちろん、次の序文を次のファイルに追加して構いません。 RRscript -eR.sh

    sudo apt-key adv --keyserver keyserver.ubuntu.com \ --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

  4. パッケージが明らかに網羅しているわけではないが、私は個人的に役立ついくつかの例を示します。以下のように、パッケージを使用して新規インストール/アップグレードすると、すべての標準の「推奨」パッケージ(たとえば)の最新バージョンが提供されます。CRANのリリースと関連パッケージの更新の間に少し遅れがあると思います。したがって、「推奨」パッケージの最新バージョンが不可欠な場合は、これらのいくつかを以下に追加することをお勧めします。arrayRdebianr-recommendedsurvivaldebianarrayR

  5. 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一つずつシェルからループには幾分非効率的であるが、私見、エラーの簡単な追跡を可能にします。いいえによっては時間がかかる場合があります。Rパッケージ、ので、多分最も簡単なのは夜間に実行できるようにします...


1
'survival'が補足パッケージのリストに含まれている理由がわかりません。(そして、私がこのbashスクリプトを誤解している可能性は十分にあります。)これは...永遠に「推奨」パッケージでした。そのスクリプトですべての推奨パッケージをインストールしない場合は、それを行うように変更する必要があります。また、r-base-develパッケージセットは、linuxを使用するすべての人に必要になると考えてください。そして、なぜMichael RutterのPPAを追加しませんか?
IRTFM 2019年

ありがとうございました!役立つコメントを踏まえて更新しました。同意しr-recommendedます。すでににあるパッケージを定期的にインストールする必要はありません。「r-base-devel」はr-base-devdebianパッケージ)として知られています-すでに含まれています。セキュリティのためにキーを使用することを嫌いではありません(回答が更新されました)。個人のパッケージアーカイブは必然的に1人に依存するため、a PPA= 個人用パッケージアーカイブを使用しないでください。Michael Rutter氏自身(2012)は、次のように述べています。
dardisco
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.