2016-10-11 1 views
0

system2 명령을 사용하여 R에서 python을 호출하려고합니다. R의 데이터 프레임을 JSON 형식으로 변환하고 system2 명령을 통해 전달하려고합니다. 사소한 예를 들어 R의 system2 명령에서 JSON 파일 보내기?

, 주어진 dataframe의 DF : 'jsonlite가'나는 변환 JSON 형식으로 'DF'를 사용

다음
A B C 
1 2 3 
4 5 6 

.

df_converted = jsonlite::toJSON(df) 

다음은 간단한 system2 명령을 사용하고자합니다. 내가 R의 질문을하고 있기 때문에이 파이썬 코드를 포함하는 것이 적절하다 같은

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

, 나는 생각하지 않지만, 어쨌든 무관하다.

나는 큰 데이터 프레임에 대해서는 간단한 (ish) 픽스가 포함 된 인수를 포함 할 수 없다고 생각합니다. 그래서 내 질문에, 그냥 모든 따옴표를 제거하지 않고이 system2 명령에서 인수로 JSON 파일을 보낼 수있는 방법이 무엇입니까? 우리가 bash 스크립트를 만들 경우

+0

데이터 프레임의 크기에 따라 디스크에 저장하고 파이썬 스크립트에서 읽을 수 있습니다. 이에 대한 옵션은 CSV와 (더 빨리 주장 할 수도 있습니다) ['feather'] (https://cran.r-project.org/web/packages/feather/index.html) ([python module] (https : // pypi.python.org/pypi/feather-format)). – r2evans

답변

0

:

#!/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 
    } 
] 

여러분은 파이썬을 사용할 필요가 있으므로 불행하게도 pu 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을 임시 파일에 저장하고 읽는 것이 더 좋습니다 (장기적으로). 임시 파일.