2016-10-11 4 views
0

私は、system2コマンドを使って、Rからpythonを呼び出そうとしています。私は、RのデータフレームをJSON形式に変換しようとしています。そして、それをsystem2コマンドで渡します。データフレームDF所与自明例えばRのsystem2コマンドでJSONファイルを送信していますか?

、:その後

A B C 
1 2 3 
4 5 6 

、 'jsonlite' を使用して、私はJSON形式に 'dfを' に変換します。

df_converted = jsonlite::toJSON(df) 

次に、単純なsystem2コマンドを使用します。

path_to_script = "C:/myscript.py" 
allArgs = c(path_to_script, df_converted) 
system2('python', args = allArgs, stdout=TRUE) 

私はRの質問をしておりますので、Pythonのコードを含めることが適切であるように私は感じていないが、それはとにかく無関係です。

私は小さなデータフレーム用の単純な(ish)フィックスではなく、大規模ではない埋め込み引用符を含む引数を含めることができない可能性があると思います。だから私の質問は、単に引用符のすべてを削除せずに、このsystem2コマンドで引数としてJSONファイルを送信する方法はありますか?

+0

データフレームのサイズに応じて、ディスクに保存してPythonスクリプトで読み込むことをお勧めします。このオプションには、CSVと(より速く議論するかもしれない)['feather'](https://cran.r-project.org/web/packages/feather/index.html)([python module](https:// pypi.python.org/pypi/feather-format))。 – r2evans

答えて

0

我々はbashスクリプトにする場合:

#!/bin/bash 
echo $1 | jq '.' 

/tmp(すなわち/tmp/example.sh)それを入れ、その後、実行します。

library(jsonlite) 

df <- read.table(text="A B C 
1 2 3 
4 5 6", header=TRUE) 

system2("/tmp/example.sh", shQuote(toJSON(df))) 

を我々はRコンソールでこれを取得:

[ 
    { 
    "A": 1, 
    "B": 2, 
    "C": 3 
    }, 
    { 
    "A": 4, 
    "B": 5, 
    "C": 6 
    } 
] 

あなたはPythonを使用する必要があるという不運があります。 T:/tmp/example.py

#!/usr/local/bin/python3 

from sys import argv 
import json 

param = json.loads(argv[1]) 

print(json.dumps(param, indent=4)) # larger indent than jq's default 

とするRスクリプトの行を変更:JSONが正しく渡されるので、Rコンソールで

[ 
    { 
     "A": 1, 
     "B": 2, 
     "C": 3 
    }, 
    { 
     "A": 4, 
     "B": 5, 
     "C": 6 
    } 
] 

を:

system2("/tmp/example.py", shQuote(toJSON(df))) 

と取得。

私は@ r2evansに賛成です。あなたがまともなJSONのチャンクを持っていて、呼び出す必要のあるスクリプトを修正できるのであれば、JSONを一時ファイルに保存して読み込む方が良いかもしれません一時ファイル。

関連する問題