새로운 버전의 R을 설치하는 무통 방법?


158

Andrew Gelman은 최근 R에 대한 쉬운 업그레이드 프로세스의 부족 (아마도 Windows보다 Linux보다 관련성이 높음) 에 대해 애도했습니다 . 소프트웨어 설치에서 모든 설정 / 패키지 복사에 이르기까지 업그레이드를 수행하는 데 유용한 기술이 있습니까?

이 제안은 의견에 포함되어 있으며 최근에 사용한 것입니다. 먼저 새 버전을 설치 한 다음 이전 버전에서이를 실행하십시오.

#--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
여기에서 사용 된 솔루션이 얼마나 최신 상태입니까?
메이

나는 최근에 그것을 사용하고 훌륭하게 작동합니다.
Litwos

답변:


74

완벽을 기하기 위해이 문제가 발생하지 않도록하는 방법이 있습니다. Dirk가 말했듯이 패키지를 컴퓨터의 다른 디렉토리에 저장하십시오.

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])
}

.Last()내 Rprofile.site 에 지정하여 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
@Prasad : Thx. 대답은 조금 오래되었지만 R 2.12는 기본 R 트리 외부의 표준 라이브러리에 설치 한 패키지를 자동으로 저장합니다. 따라서 지금해야 할 일은 해당 라이브러리를 찾아서 링크하지 않는 것입니다.
Joris Meys

@ 428790 : 언급 한 라이브러리를 어디서 찾을 수 있습니까?
Daniel Krizian

@DanielKrizian 내부 객체의 기본값을 보라 .Library. 필자의 경우 변경되지 않은 경우 R 설치 폴더로 돌아갑니다 (특히 싫어하지만)
Joris Meys

42

이것은 물론 오래된 질문이지만 방금 찾은 새로운 쉬운 대답 (Windows에서만 작동)이있을 수 있습니다.

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

이를 수행하는 가장 좋은 방법은 RGui 시스템입니다. 모든 패키지가 새 폴더로 전송되고 이전 패키지는 삭제되거나 저장됩니다 (둘 중 하나를 선택할 수 있음). 그런 다음 RStudio를 다시 열면 업데이트 된 버전을 사용하고 있음을 즉시 인식합니다. 나에게 이것은 매력처럼 작동했습니다.

{installr}에 대한 자세한 정보는 여기를 참조하십시오 .

시몬


2
github을 통해 설치된 패키지는 어떻습니까?
skan

8
이것이 Windows 용임을 언급해야합니다.
beroe

27

두 가지 빠른 제안 :

  1. 사용 가보의 batchfiles 이 대량 라이브러리 재배치를 예를 도와; 상기 도구를 말한다. 경고 : 나는 그들을 사용하지 않았습니다.

  2. 설치된 R 버전의 'filetree'내에 라이브러리를 설치하지 마십시오. 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는 단 하나의 업그레이드 (R 1.9-> R 2.0 일 수 있음) 만 모든 라이브러리를 다시 빌드해야했습니다.
Dirk Eddelbuettel

5
또한 일반적으로 라이브러리 폴더를 새 설치에 복사하고 update.packages를 실행합니다. 잘 작동하는 것 같습니다. 선택적 설치 폴더는 훨씬 더 우아합니다.
kpierce8

그냥 지적합니다 - 나는 (R 윈도우 사용자를위한) 더크의 제안 수행하는 R 코드와 답변 추가 한
탈 Galili 한

26

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

4

Dirk의 제안에 따라 Windows에서 R 코드를 작성하는 방법은 다음과 같습니다. Windows XP에서 R을 쉽게 업그레이드하는 방법

업데이트 (15.04.11) : Windows 7에서 R 업그레이드의 일반적인 문제를 해결하는 방법을 설명하는 주제에 대한 다른 게시물을 작성했습니다.


2
최신 버전의 R의 경우, Tal에는 installr이 프로세스를 자동화 하는 패키지 (현재는 Windows에서만) r-statistics.com/tag/installr 또는 github.com/talgalili/installr
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

두 가지 옵션 :

  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

당신이 예견 할 수 있다면 받아 들여진 대답이 효과가있을 수 있지만, 나는 이미 이전 버전을 제거 했으므로이 지시를 따를 수 없었습니다. 아래 설명 된 단계는 2.1 및 3.1에서 OSX 업그레이드에 적용되었습니다.

업데이트 : 3.1 또는 3.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)

0

나를 위해이 페이지는 좋은 https://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ 또는 다른 옵션은 새로운 것을 설치하는 것입니다 옵션 및 마지막으로 예를 들어 내 PC의 창에 넣습니다.

.libPaths (c ( "D : / 문서 /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"이며 고정 된 다음 다른 패키지를 복사하거나 이동할 필요가 없기 때문에 다른 경로를 넣습니다. 내 sugest는 그냥 전화


0

linux+ bash+ debian+ apt사용자 :

  1. 의 최신 버전으로 설치 / 업그레이드하는 R경우 root권한 이 있다고 가정 할 수 있습니다 . (필수 아니, 단지 많은 간단한 과정을 만들어, 일관성을 위해 사용 아래 스크립트 sudo에 대한 모든 . 설치 수)에 따라 R패키지도 설치되어있다가 root, 이러한를 배치하여 허용된다 /usr/local/.

  2. curl아래 의 호출 은 당신이 이미 가장 불안정한 최신 버전 ( 패키지를 빌드 / 체크 할 때 필요함) 의 sid릴리즈에 관심이 있다고 가정합니다.RR

    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. arrayR패키지는 분명히 철저한 아니지만 개인적으로 유용한 몇 가지 예를 제공합니다. 아래와 같이 debian패키지 와 함께 새로 설치 / 업그레이드하면 r-recommended모든 표준 '권장'패키지 (예 :)의 최신 버전을 제공해야합니다 survival. CRAN 릴리스와 관련 debian패키지 업데이트간에 약간의 지연이있을 수 있습니다 . 따라서 array최신 버전의 '권장' R패키지가 필요한 경우 아래 에 이들 중 일부를 추가 할 수 있습니다 .

  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
왜 '서바이벌'이 그 보충 패키지 목록에 있는지 잘 모르겠습니다. (그리고이 bash 스크립트를 오도 할 가능성이 있습니다.) 그 이후로 "추천 된"패키지였습니다. 해당 스크립트와 함께 모든 권장 패키지를 설치하지 않는 경우 수정하도록 수정해야합니다. 또한 리눅스를 사용하는 사람이라면 r-base-devel 패키지 세트가 필요할 것이라고 생각하십시오. 그리고 Michael Rutter의 PPA를 추가하지 않으시겠습니까?
IRTFM

감사합니다! 유용한 의견에 비추어 업데이트되었습니다. 이미에있는 패키지를 설치할 필요는 없습니다 r-recommended. 'r-base-devel'은 r-base-dev( debianpackage) 로 알려져 있습니다 -이미 포함되었습니다. 보안 키를 사용하는 것에 반대하지 않습니다 (응답 업데이트). 멀리 사용에서 응답 숙박 PPA= 개인 패키지 아카이브를 다음과 같이 한 사람에 의존하고, 따라서 잠재적으로 오류를 범할 필요가 있습니다. Michael Rutter 자신 (2012)의 말 : "CRAN을 사용하고 있다면 두 곳에서 동일한 패키지가 제공되므로 PPA로 변경할 이유가 없습니다."
dardisco
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.