[PYTHON] 파이썬에서 R 스크립트 실행하기
PYTHON파이썬에서 R 스크립트 실행하기
이 질문을 검색하고 이에 대한 답변을 찾았지만 그 중 아무 것도 작동하지 않는 것 같습니다. 이것은 내 R 스크립트를 실행하기 위해 파이썬에서 사용하는 스크립트입니다.
import subprocess
retcode = subprocess.call("/usr/bin/Rscript --vanilla -e 'source(\"/pathto/MyrScript.r\")'", shell=True)
이 오류가 발생합니다.
Error in read.table(file = file, header = header, sep = sep, quote = quote, :
no lines available in input
Calls: source ... withVisible -> eval -> eval -> read.csv -> read.table
Execution halted
여기에 내 R 스크립트의 내용이 있습니다 (아주 간단합니다!).
data = read.csv('features.csv')
data1 = read.csv("BagofWords.csv")
merged = merge(data,data1)
write.table(merged, "merged.csv",quote=FALSE,sep=",",row.names=FALSE)
for (i in 1:length(merged$fileName))
{
fileConn<-file(paste("output/",toString(merged$fileName[i]),".txt",sep=""))
writeLines((toString(merged$BagofWord[i])),fileConn)
close(fileConn)
}
r 명령 줄에서 source ( 'MyrScript.r')를 사용하면 r 스크립트가 제대로 작동합니다. 또한, 명령 행에서 subprocess.call 함수 (예 : / usr / bin / Rscript -vanilla -e 'source ( "/ pathto / MyrScript.r")')에 전달하는 정확한 명령을 사용하려고하면, 그것은 작동 발견, 난 정말 문제가 뭔지 모르겠다.
해결법
-
==============================
1.Rscript 호출 내에서 소스를 너무 많이 믿지는 않으므로 다른 중첩 된 R 세션을 어디에서 실행하는지 완전히 이해하지 못할 수도 있습니다. 작업 디렉토리가 사용자가 생각하는 것과 다르지 않은 것과 같은 간단한 작업 때문에 프로세스가 실패 할 수 있습니다.
Rscript 호출 내에서 소스를 너무 많이 믿지는 않으므로 다른 중첩 된 R 세션을 어디에서 실행하는지 완전히 이해하지 못할 수도 있습니다. 작업 디렉토리가 사용자가 생각하는 것과 다르지 않은 것과 같은 간단한 작업 때문에 프로세스가 실패 할 수 있습니다.
Rscript를 사용하면 스크립트를 직접 실행할 수 있습니다 (Linux를 사용하는 경우 man Rscript를 참조하십시오).
그런 다음 직접 할 수 있습니다.
subprocess.call ("/usr/bin/Rscript --vanilla /pathto/MyrScript.r", shell=True)
또는 Rscript 명령과 해당 매개 변수를 목록으로 더 잘 파싱
subprocess.call (["/usr/bin/Rscript", "--vanilla", "/pathto/MyrScript.r"])
또한 작업을 쉽게하기 위해 R 실행 파일을 만들 수 있습니다. 이를 위해 스크립트의 첫 번째 행에 다음을 추가하면됩니다.
#! /usr/bin/Rscript
실행 권한을 부여하십시오. 자세한 내용은 여기를 참조하십시오.
그런 다음 다른 쉘 명령이나 스크립트처럼 파이썬 호출을 수행 할 수 있습니다.
subprocess.call ("/pathto/MyrScript.r")
-
==============================
2.RPy2를 살펴볼 가치가 있다고 생각합니다. R-bloggers.com에 대한 멋진 프레젠테이션이 시작되었습니다.
RPy2를 살펴볼 가치가 있다고 생각합니다. R-bloggers.com에 대한 멋진 프레젠테이션이 시작되었습니다.
http://www.r-bloggers.com/accessing-r-from-python-using-rpy2/
본질적으로, 당신은 높은 수준과 낮은 수준의 인터페이스를 제공하는 R 객체로 R 라이브러리에 액세스 할 수 있습니다.
다음은 가장 최신 버전의 문서입니다. https://rpy2.readthedocs.io
Python 사용자에게 Anaconda를 가리키고 싶습니다. 패키지 관리자 인 conda를 사용하여 rpy2를 설치하면 R을 설치할 수 있습니다.
$ conda install rpy2
그리고 문서의 소개에 기반한 비 네트가 있습니다.
>>> from rpy2 import robjects >>> pi = robjects.r['pi'] >>> pi R object with classes: ('numeric',) mapped to: <FloatVector - Python:0x7fde1c00a088 / R:0x562b8fbbe118> [3.141593] >>> from rpy2.robjects.packages import importr >>> base = importr('base') >>> utils = importr('utils') >>> import rpy2.robjects.packages as rpackages >>> utils = rpackages.importr('utils') >>> packnames = ('ggplot2', 'hexbin') >>> from rpy2.robjects.vectors import StrVector >>> names_to_install = [x for x in packnames if not rpackages.isinstalled(x)] >>> if len(names_to_install) > 0: ... utils.install_packages(StrVector(names_to_install))
R 스 니펫을 실행하면 다음과 같습니다.
>>> robjects.r(''' ... # create a function `f` ... f <- function(r, verbose=FALSE) { ... if (verbose) { ... cat("I am calling f().\n") ... } ... 2 * pi * r ... } ... # call the function `f` with argument value 3 ... f(3) ... ''') R object with classes: ('numeric',) mapped to: <FloatVector - Python:0x7fde1be0d8c8 / R:0x562b91196b18> [18.849556]
작은 자체 포함 그래픽 데모 :
from rpy2.robjects.packages import importr graphics = importr('graphics') grdevices = importr('grDevices') base = importr('base') stats = importr('stats') import array x = array.array('i', range(10)) y = stats.rnorm(10) grdevices.X11() graphics.par(mfrow = array.array('i', [2,2])) graphics.plot(x, y, ylab = "foo/bar", col = "red") kwargs = {'ylab':"foo/bar", 'type':"b", 'col':"blue", 'log':"x"} graphics.plot(x, y, **kwargs) m = base.matrix(stats.rnorm(100), ncol=5) pca = stats.princomp(m) graphics.plot(pca, main="Eigen values") stats.biplot(pca, main="biplot")
-
==============================
3.스크립트를 실행하기 원하면 import sys가 사용할 수있는 sys lib의 system ( "쉘 명령")을 사용할 수 있습니다. 유용한 출력이있는 경우 셸 명령 끝에 "> outputfilename"을 사용하여 결과를 인쇄 할 수 있습니다.
스크립트를 실행하기 원하면 import sys가 사용할 수있는 sys lib의 system ( "쉘 명령")을 사용할 수 있습니다. 유용한 출력이있는 경우 셸 명령 끝에 "> outputfilename"을 사용하여 결과를 인쇄 할 수 있습니다.
예 :
import sys system("ls -al > output.txt")
-
==============================
4.R 스크립트 시작 부분에 다음과 같은 줄을 추가하십시오.
R 스크립트 시작 부분에 다음과 같은 줄을 추가하십시오.
setwd("path-to-working-directory")
단, 경로를 features.csv 및 BagofWords.csv 파일이 들어있는 폴더의 경로로 바꿉니다.
나는 당신이 가지고있는 문제가 있다고 생각합니다. R에서이 스크립트를 실행할 때 작업 디렉토리는 이미 올바른 경로이지만, 파이썬에서 스크립트를 실행할 때, 그것은 다른 곳의 작업 디렉토리를 기본값으로하기 때문입니다 (아마 사용자 디렉토리의 맨 위 ).
R 스크립트 시작 부분에 추가 행을 추가하면 작업 디렉토리를 명시 적으로 설정하고이 파일에서 읽을 코드가 작동합니다. 또는 read.csv ()의 파일 이름을이 파일의 전체 파일 경로로 바꿀 수 있습니다.
@dmontaner는 자신의 대답에이 가능성을 제안했습니다.
-
==============================
5.나는 파이썬과 R 사이의 많은 차이점이 특히 데이터를 전달할 때 시스템 호출을 사용하도록 제안하지 않을 것이다.
나는 파이썬과 R 사이의 많은 차이점이 특히 데이터를 전달할 때 시스템 호출을 사용하도록 제안하지 않을 것이다.
이 답변을보기 위해 Python에서 R을 호출하는 표준 라이브러리가 많이 있습니다.
from https://stackoverflow.com/questions/19894365/running-r-script-from-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 위키 마크 업을위한 파이썬 모듈 (0) | 2018.10.20 |
---|---|
[PYTHON] 순환 가져 오기 문을 해결하는 Python 방법? (0) | 2018.10.20 |
[PYTHON] OpenCV와 두 이미지 결합 (0) | 2018.10.20 |
[PYTHON] Python에서 Comet을 이해하는 데 도움이 필요하다 (Django 사용) (0) | 2018.10.20 |
[PYTHON] 무한 중첩 목록에서 정확히 무슨 일이 일어나고 있습니까? (0) | 2018.10.20 |