2016-05-10 5 views
2

Rスクリプトを作成したので、RスクリプトをPythonから呼び出す必要があります。 Rスクリプトにはいくつかのパッケージが必要ですが、Pythonコードを実行するたびに次のエラーが発生します。サブプロセスコマンドを使用してRスクリプトを呼び出すが、rスクリプトのLibrary()コマンドは実行できない

CalledProcessError: Command '['C:/Program Files/R/R-3.2.3/bin/x64/Rscript.exe', 'D:/Abhi/desktop/testing/SCRIPTS/JMOTIF/data-04-13/NewClassificationMethod.R', '51', '9', '20', '20', 'D://Abhi//desktop//testing//SCRIPTS//JMOTIF//data-04-13//PureAgri.csv', 'D://Abhi//desktop//testing//SCRIPTS//JMOTIF//data-04-13//PureForest.csv']' returned non-zero exit status 1

ライブラリコールをコメントアウトすると、エラーは発生せず、スクリプトも機能します。

小さな一例として次のコードは動作しません。

pythonArgs = commandArgs(trailingOnly = TRUE) 
library(plyr) 
wSize= as.numeric(pythonArgs[1]) #as.numeric(pythonArgs[1])#Window Size 
paaSize=as.numeric(pythonArgs[2])#Pax approximation size 
cat(wSize, paaSize) 

をこのコードは

pythonArgs = commandArgs(trailingOnly = TRUE) 
#library(plyr) 
wSize= as.numeric(pythonArgs[1]) #as.numeric(pythonArgs[1])#Window Size 
paaSize=as.numeric(pythonArgs[2])#Pax approximation size 
cat(wSize, paaSize) 

かかわらず、次のように動作します私は現在のPythonからそれを呼び出しています方法です。

cmd = [command, path2Script] + args 
x = subprocess.check_output(cmd,universal_newlines = True) 
+0

好奇心から外れています。ライブラリではなく「require(plyr)」を使用するとどうなりますか? – jamieRowen

+0

エラーメッセージが生成されないので、ライブラリを使用する必要があるまでスクリプトは実行されますが、require(plyr)の値をチェックするとFALSE値が返されました。 – shar

+0

これはすべてのパッケージで起こりますか? 'tryCatch'を使ってエラーの性質を調べることはできますか? – jamieRowen

答えて

1

Pythonのサブプロess Popenを使用して、子プロセスからの出力またはエラーを条件付きで取り込みます。ここではRスクリプトです。

from subprocess import Popen, PIPE 

cmd = [command, path2Script] + args 
p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)    
output, error = p.communicate() 

if p.returncode == 0:    
    print('R OUTPUT:\n {0}'.format(output))    
else:     
    print('R ERROR:\n {0}'.format(error)) 

あなたはPOpenを実行していたが、より多くの有益なエラーメッセージは、パッケージのパス状況のことを思い出させて、Pythonのコンソールに直接つながります。

R ERROR: 
b"Error in library(plyr) : there is no package called 'plyr'\r\nExecution halted\r\n" 
+0

これを行うと、Noneだけが返されます。 subprocessコマンドはRコンソールが吐き出すすべてを与えています。それはエラー処理のために多くの助けとなりました。なぜそれが返っているか考えてみませんか? Rの場合でも、整数10を返すだけです – shar

関連する問題