문제

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

이 제안은 의견에 포함되었으며 최근에 사용했던 것입니다. 먼저 새 버전을 설치 한 다음 이전 Verion에서 실행합니다.

#--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)
도움이 되었습니까?

해결책

완전성을 위해서는이 문제를 해결하지 못하게하는 몇 가지 방법이 있습니다. Dirk가 말했듯이 패키지를 컴퓨터의 다른 디렉토리에 저장하십시오.

install.packages("thepackage",lib="/path/to/directory/with/libraries")

기본값을 변경할 수 있습니다 .Library 함수를 사용한 값 .libPaths ~도

.libPaths("/path/to/directory/with/libraries")

이것은이 경로를 .Library 변수는 기본값으로 만듭니다.

이를 추가로 자동화하려면 rprofile.site 파일에이를 지정할 수 있으며 R 빌드의 / etc / directory에 있습니다. 그러면 r로드 할 때마다 자동으로로드되며 더 이상 걱정할 필요가 없습니다. 지정된 디렉토리에서 패키지를 설치하고로드 할 수 있습니다.

마지막으로, 새 R 버전을 설치할 때 모든 패키지를 다시 설치할 수있는 rprofile.site에 작은 코드가 포함되어 있습니다. 당신은 그들을 나열해야합니다 ~ 전에 새 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])
}

지정하여 Packagelist.rdata를 만듭니다 .Last() 내 rprofile.site에서. 일부를 설치 한 경우 패키지 목록을 업데이트합니다.

.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에서 설치되지 않은 패키지가 있으면 완벽하게 작동하지 않습니다. 그러나이 코드는 해당 코드를 포함시키기에 쉽게 확장 할 수 있습니다.

다른 팁

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

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

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

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

사이먼

두 가지 빠른 제안 :

  1. Gabor 's를 사용하십시오 배치 파일 이 대량 라이브러리 이전에 도움이되는 도구로 구성되어 있다고합니다. 경고 : 나는 그들을 사용하지 않았습니다.

  2. 설치된 R 버전의 'Filetree'내에 라이브러리를 설치하지 마십시오. Windows에서는 r을 c :/opt/r/r- $ 버전에 넣을 수 있지만 모든 라이브러리를 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이 아닌 패키지가있는 경우 완전히 작동하지 않습니다. 예를 들어, 비 크랜 사이트에서 다운로드 한 개인 패키지 또는 패키지.

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()

질문에 제공된 솔루션과 관련하여 새 버전을 이미 설치 한 경우 이전 버전의 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 진술은 패키지가 있는지 확인합니다 ~ 아니다 if

  • 이미 새로운 R 버전으로 설치되어 있거나
  • 이전 반복에 설치된 패키지의 종속성으로 설치되었습니다. for 고리.

Dirk의 제안에 따라 Windows에서 수행 할 수있는 R 코드는 다음과 같습니다. Windows XP에서 R를 쉽게 업그레이드하는 방법

업데이트 (15.04.11) : 나는 주제에 대한 다른 게시물을 썼다. Windows 7에서 R을 업그레이드합니다

두 가지 옵션 :

  1. 내 대답을 구현하십시오 여기
  2. Statet과 함께 Eclipse에서 R을 사용하는 경우 구성을 실행하십시오, 클릭 콘솔 탭과 상자에 R 스 니펫 스타트 업 후 실행 선택한 디렉토리와 함께이 라인을 추가하십시오. .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로 입력하는 대신) 아래 명령을 사용할 수 있습니다. 두 번째는 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에 정의되면 위의 지침에서 설치된 패키지를 살펴볼 수 있습니다 ...

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-n-windows-using-the-installr-package/또는 다른 옵션은 새 옵션을 설치하는 것입니다. 예를 들어 내 PC의 Windows에서 최종적으로 넣는 것입니다.

.libpaths ( "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"입니다. 내 sugest는 그냥 전화 해요

linux + bash + debian + apt 사용자 :

  1. 최신 버전으로 설치/업그레이드하는 경우 R, 그러면 우리는 당신이 가지고 있다고 가정 할 수 있습니다 root 권한. (필수적이지 않고 프로세스를 훨씬 간단하게 만듭니다. 일관성을 위해 아래의 스크립트는 사용합니다. sudo ~을 위한 모두 설치.) R 패키지도 설치합니다 root, 따라서 이것들을 배치하는 것이 허용됩니다 /usr/local/.

  2. 전화 curl 아래는 이미 관심이 있다고 가정합니다 sid 출시 R, 최신 불안정한 버전 (빌딩/확인시 필요에 따라 R 패키지) 즉

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

    이것은 쉽게 내 안정적인 릴리스로 쉽게 대체 될 수 있지만 buster.

  3. 나는 내가있다 ~ 아니다 사용 a 열쇠 그대로 일반적으로 권장됩니다. 특히 (다음 스크립트에서와 같이) 패키지를 설치하는 경우에는 필수적이지 않습니다. 이내에 R 그 자체 (Rscript -e 아래에). 또한 이러한 열쇠는 몇 년마다 깨지거나 바꾸는 경향이 있습니다. 따라서 물론 파일에 다음 서문을 추가 할 수 있습니다. R.sh 다음 :

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

  4. 그만큼 arrayR 패키지 분명히 철저하지는 않지만 개인적으로 유용한 몇 가지 예를 제공합니다. 새로운 설치/업그레이드 debian 패키지 r-recommended, 아래와 같이 모든 표준 '권장'패키지의 최신 버전을 제공해야합니다 (예 : survival). 나는 크랜 릴리스와 관련 릴리스에 대한 업데이트 사이에 약간의 지연이있을 수 있다고 생각합니다. 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 패키지, 그래서 밤새도록 가장 간단하게 달리게 할 것입니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top