[英]Sending JSON files in a system2 command in R?
我正在嘗試通過使用system2命令從R調用python。 我正在嘗試將R中的數據幀轉換為JSON格式,然后通過system2命令將其傳遞。
對於一個簡單的示例,給定數據幀df:
A B C
1 2 3
4 5 6
然后,使用“ jsonlite”將“ df”轉換為json格式。
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代碼並不適合,但無論如何都沒有關系。
我認為問題可能是我不能包含帶有嵌入式引號的參數,這對於小型數據框而言是一種簡單的解決方法,但對於大型數據幀而言則根本不可行。 所以我的問題是,在不刪除所有引號的情況下,有什么方法可以在此system2命令中將JSON文件作為參數發送嗎?
如果我們制作一個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的不幸,因此我們還將提出:
#!/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
在/tmp/example.py
,將R腳本中的行更改為:
system2("/tmp/example.py", shQuote(toJSON(df)))
並得到:
[
{
"A": 1,
"B": 2,
"C": 3
},
{
"A": 4,
"B": 5,
"C": 6
}
]
在R控制台中,因此可以正確傳遞JSON。
我同意@ r2evans的觀點,如果您有不錯的JSON塊並且可以修改您需要調用的腳本,則從長遠來看,將JSON保存到臨時文件並從臨時文件中讀取可能會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.