2012-01-14 4 views
19

R로 재현 가능한 컴퓨팅을위한 프레임 워크를 개발 중입니다. 제가 고심하고있는 한 가지 문제는 일부 R 코드가 패키지의 XY-Z 버전에서 완벽하게 실행될 수 있지만 왜 3 년 후에 재현하려고하면 패키지가 업데이트되고 일부 기능이 변경되며 코드가 더 이상 실행되지 않습니다. 이 문제는 예를 들어 패키지를 사용하는 Sweave 문서에도 영향을줍니다.여러 버전의 R 패키지를 설치하고 관리하는 방법

결과를 자신있게 재현하는 유일한 방법은 원래 작성자가 사용한 패키지의 R 버전과 버전을 설치하는 것입니다. 이것이 하나의 사례라면 CRAN 아카이브에서 물건을 가져 와서 적절한 버전을 설치할 수 있습니다. 그러나 내 프레임 워크의 경우 이는 비실용적이며 패키지 버전이 사전 설치되어 있어야합니다.

이제는 자신을 R의 단일 버전으로 제한한다고 가정합니다. 2.14. 여러 버전의 R 패키지를 설치하여 실전에로드 할 수있는 실용적인 방법은 무엇입니까? 모든 패키지의 모든 버전에 대해 별도의 라이브러리 디렉토리를 만든 다음 사용자 정의 lib.loc 인수를로드하는 것과 같은 작업을 수행 할 수 있다고 가정합니다. 이것은 지저분 할 것입니다. 비슷한 것을하기위한 팁이나 이전의 시도?

내 프레임 워크는 우분투 서버에서 실행됩니다.

+0

devtools 패키지의 dev_mode에 익숙합니까? IIRC는 비슷한 문제를 다루고 있습니다. – baptiste

+0

아닙니다. libpath를 임시 샌드 박스 디렉토리로 변경합니다. 그러나 그 이상의 시스템은 제공하지 않습니다. – Jeroen

+0

사본입니다. http://stackoverflow.com/questions/8343686/how-to-install-2-different-r-versions-on-debian/8343739#8343739 – Oz123

답변

4

foo 대신 foo_1.0 디렉토리로 이름을 바꿀 수있는 패키지를 설치하고 주어진 R + 패키지 스냅 샷을 하나의 라이브러리로 다시 만들려는 버전을 소프트 링크 할 수 있습니다. 분명히 패키지는 실제로 별도의 트리에 살 수 있으므로 library.projectX/foo ->library.all/foo/1.0 일 수 있습니다.

+0

또한, 환경 변수 R_LIBS를 해당 프로젝트의 해당 디렉토리 –

-1

설명 파일을 수정하고 버전 번호를 추가하여 "패키지"필드를 변경하려고합니다.

예를 들어, 패키지 원본을 CRAN 페이지 (http://cran.r-project.org/web/packages/pls/)에서 다운로드 할 수 있습니다. 압축 된 파일 (pls_2.3-0.zip)을 디렉토리 ("pls /")에 압축을 풉니 다. 다음 단계는 DESCRIPTION ("pls/DESCRIPTION")에서 패키지 이름을 변경하고 R 명령 'R CMD INSTALL pls /'로 설치하는 것입니다. 여기서 'pls /'는 수정 된 DESCRIPTION 파일이있는 패키지 소스에 대한 경로입니다.

R 라이브러리 경로로 게임하는 것은 위험한 것 같습니다.

+5

으로 변경할 수 있습니다. 모든 종속성을 깨기 때문에 패키지 이름으로 재생하는 것이 훨씬 위험합니다. 라이브러리 경로는 다른 패키지 이름으로 재생되도록 설계되었습니다. –

1

운영 체제은 완전한 분리를 위해 더 많은 핸들을 제공하고 데비안/우분투 스택은 사용 가능한 톤의 스택으로 제공합니다. 내가 가지고 놀았던 두 가지는 다음과 같습니다.

  • chroot 환경 : 호스트 시스템과 별도의 빌드 환경을 완성하기 위해 이것을 사용합니다. 예를 들어 제가 생성 한 모든 데비안 업로드 파일은 amd64 우분투 서버에 호스트 된 i386 pbuilder chroot에 내장되어 있습니다. Chroot는 매우 강력한 유닉스 시스템 호출이다. Chroots, 특히 그 위에 빌드 된 pbuilder 시스템 (데비안 패키지 빌딩 용)은 헤드리스로 작동합니다.

  • 가상 머신 : 이것은 당신에게 완전한 일반성을 제공합니다. 그렇게 강력하지 않은 상자는 Debian i386, Ubuntu i386 및 Windoze XP의 세 가상 머신을 쉽게 처리합니다. 이를 위해 현재 libvirt와 함께 KVM을 사용합니다. 이것은 리눅스에만 해당됩니다. 나는 또한 VirtualBox와 VMware를 과거에도 사용 해왔다.

관련 문제