Rpy2, pyrserve 및 PypeR은 어떻게 비교됩니까?
Python 프로그램 내에서 R에 액세스하고 싶습니다. 저는 Rpy2, pyrserve 및 PypeR을 알고 있습니다.
이 세 가지 옵션의 장단점은 무엇입니까?
나는 3 개 중 하나를 다른 것보다 더 잘 알고 있지만 질문에 주어진 순서대로 :
rpy2 :
- Python과 R 간의 C 레벨 인터페이스 (R은 임베디드 프로세스로 실행)
- 데이터를 복사 할 필요없이 Python에 노출 된 R 객체
- 반대로 Python의 numpy 배열은 복사본을 만들지 않고도 R에 노출 될 수 있습니다.
- 저수준 인터페이스 (RC-API에 가까움) 및 고수준 인터페이스 (편의상)
- 벡터 및 배열의 내부 수정 가능
- R 콜백 함수는 Python에서 구현 될 수 있습니다.
- Python 레이블이있는 익명 R 객체를 가질 수 있습니다.
- Python 산세 가능
- 콘솔로 R의 동작을 완전히 사용자 정의 (전체 R GUI를 구현할 수 있음)
- 제한된 지원이있는 MSWindows
피 서브 :
- 네이티브 Python 코드 (CPython, Jython, IronPython과 함께 작동 / 작동해야 함)
- R의 Rserve 사용
- 원격 계산 및 RServe와 관련된 장점과 불편 함
파이퍼 :
- 네이티브 Python 코드 (CPython, Jython, IronPython과 함께 작동 / 작동해야 함)
- 파이프를 사용하여 Python이 R과 통신하도록 함 (장점과 불편 함이 연결됨)
편집 : rpy2에 대한 Windows 지원
Journal of Statistical Software on PypeR 의 논문에서 발췌 :
RPy는 Python에서 R에 액세스하는 간단하고 효율적인 방법을 제공합니다. Python과 R 간의 빈번한 상호 작용 작업에 강력하고 매우 편리합니다.이 패키지를 사용하면 Python 프로그램이 기본 데이터 유형의 Python 개체를 R 함수에 전달하고 결과를 Python 개체로 반환 할 수 있습니다. 이러한 기능은 Python과 R이 자주 상호 작용하는 경우에 매력적인 솔루션입니다. 그러나 아래 나열된 것처럼이 패키지에는 여전히 제한이 있습니다.
공연:
RPy는 대용량 데이터 세트 또는 계산 집약적 인 작업에 대해 잘 작동하지 않을 수 있습니다. 대화의 모든 라운드에서 RPy가 R 표현식의 반환 된 값을 기본 유형의 Python 객체 또는 NumPy 배열로 변환하기 때문에 R 데이터의 Python 복사본을 생성하는 데 많은 시간과 메모리가 필연적으로 소모됩니다. 최근에 개발 된 RPy 분기 인 RPy2는 Python 개체를 다시 Python 개체에 복사하는 대신 Python 개체를 사용하여 R 개체를 참조합니다. 이 전략은 빈번한 데이터 변환을 방지하고 속도를 향상시킵니다. 그러나 메모리 소비는 여전히 문제입니다. [...] 마이크로 어레이 데이터 분석을위한 온라인 플랫폼 인 WebArray (Xia et al. 2005)를 구현할 때 R의 명령 줄 사용자 인터페이스 대신 RPy를 통해 R을 실행하면 작업에 약 1/4 이상의 계산 시간이 소요되었습니다. 따라서, 우리는 R을 독립적으로 실행할 때와 동일한 성능을 유지하는 WebArrayDB (Xia et al. 2009)와 같은 후속 개발에서 파이프를 통해 Python에서 R을 실행하기로 결정했습니다. 이러한 성능 차이의 정확한 이유는 알 수 없지만 RPy는 R 스크립트를 실행하기 위해 R의 공유 라이브러리를 직접 사용한다는 것을 알았습니다. 반대로 R을 파이프를 통해 실행한다는 것은 R 인터프리터를 직접 실행하는 것을 의미합니다.
기억 :
R은 비경제적인 기억 사용으로 비난을 받았습니다. 대형 R 객체가 사용하는 메모리는 이러한 객체가 삭제 된 후 거의 해제되지 않습니다. R에서 메모리를 해제하는 유일한 방법은 R을 종료하는 것입니다. RPy 모듈은 R을 Python 객체로 래핑합니다. 그러나 R 라이브러리는 Python 객체가 삭제 되더라도 메모리에 남아 있습니다. 즉, 호스트 Python 스크립트가 종료 될 때까지 R에서 사용하는 메모리를 해제 할 수 없습니다.
휴대 성 :
C로 작성된 확장이있는 모듈로서 RPy 소스 패키지는 POSIX (Portable Operating System Interface for Unix) 시스템에서 특정 R 버전으로 컴파일되어야하며 R은 공유 라이브러리가 활성화 된 상태에서 컴파일되어야합니다. 또한 Windows 용 바이너리 배포판은 다른 버전의 Python / R의 특정 조합에 바인딩되어 있으므로 사용자가 사용자의 소프트웨어 환경에 맞는 배포판을 찾는 데 어려움을 겪는 경우가 자주 발생합니다.
파이퍼에서 나는 assign ()을 사용하여 파이썬에서 r 인스턴스로 큰 행렬을 전달할 수 없습니다. 그러나 rpy2에는 문제가 없습니다. 제 경험입니다.
개발자의 관점에서 우리는 rpy / rpy2를 사용하여 Python 기반 애플리케이션에 통계 및 그리기 기능을 제공했습니다. rpy / rpy2는 Python과 R의 특정 조합을 위해 컴파일되어야하기 때문에 응용 프로그램을 제공하는 데 큰 문제를 일으켰습니다. 따라서 R도 번들로 제공하지 않는 한 즉시 작동하는 바이너리 배포판을 제공 할 수 없습니다. rpy / rpy2는 특히 설치하기 쉽지 않기 때문에 관련 부분을 matplotlib와 같은 네이티브 Python 모듈로 교체했습니다. R을 사용해야한다면 pyrserve로 전환했을 것입니다. R 서버를 로컬에서 시작하고 R 버전에 대한 걱정없이 연결할 수 있기 때문입니다.
참조 URL : https://stackoverflow.com/questions/5630441/how-do-rpy2-pyrserve-and-pyper-compare
'Programing' 카테고리의 다른 글
함수 반환 값은 자동 개체이므로 소멸이 보장됩니까? (0) | 2020.12.31 |
---|---|
AppDomain 및 MarshalByRefObject 수명 : RemotingException을 피하는 방법? (0) | 2020.12.31 |
자바 스크립트에서 이중 괄호의 의미와 액세스 방법 (0) | 2020.12.30 |
Java 8-지루한 수집 방법 생략 (0) | 2020.12.30 |
하나의 PostgreSQL 쿼리에서 여러 WITH 문을 사용하는 방법은 무엇입니까? (0) | 2020.12.30 |