data.frames のデフォルトの "/json" 後置オプションを列ベースから行ベースに変更するきれいな方法はありますか?
R の Data.frames は、私が正しく理解している場合、実際には、各リストが他のリストと同じ長さの名前付きリストです。を使用するjsonlite
と、違いを簡単に示すことができます (簡単な例、はい):
library(jsonlite)
ll <- list(xx=1:3, yy=6:8)
dd <- data.frame(xx=1:3, yy=6:8)
toJSON(dd)
# [1] "[ { \"xx\" : 1, \"yy\" : 6 }, { \"xx\" : 2, \"yy\" : 7 }, { \"xx\" : 3, \"yy\" : 8 } ]"
toJSON(ll)
# [1] "{ \"xx\" : [ 1, 2, 3 ], \"yy\" : [ 6, 7, 8 ] }"
toJSON(dd, dataframe='column')
# [1] "{ \"xx\" : [ 1, 2, 3 ], \"yy\" : [ 6, 7, 8 ] }"
toJSON(as.list(dd))
# [1] "{ \"xx\" : [ 1, 2, 3 ], \"yy\" : [ 6, 7, 8 ] }"
最後の 3 つは同一です。dataframe
引数 toを使用するかtoJSON
、data.frame
を aに強制することによって、強制的に同じように見せるのは簡単list
です。
OpenCPU の API を使用すると、呼び出しは次のようになります。
$ curl http://localhost:7177/ocpu/library/base/R/list/json -H "Content-Type: application/json" -d '{ "xx":[1,2,3], "yy":[6,7,8] }'
{
"xx" : [
1,
2,
3
],
"yy" : [
6,
7,
8
]
}
$ curl http://localhost:7177/ocpu/library/base/R/data.frame/json -H "Content-Type: application/json" -d '{ "xx":[1,2,3], "yy":[6,7,8] }'
[
{
"xx" : 1,
"yy" : 6
},
{
"xx" : 2,
"yy" : 7
},
{
"xx" : 3,
"yy" : 8
}
]
data.frame
それ自体を JSON 化された列ベースにしたい場合は、次のように強制する必要がありlist
ます。
$ curl http://localhost:7177/ocpu/library/base/R/data.frame -H "Content-Type: application/json" -d '{ "xx":[1,2,3], "yy":[6,7,8] }'
/ocpu/tmp/x000a0fb8/R/.val
/ocpu/tmp/x000a0fb8/stdout
/ocpu/tmp/x000a0fb8/source
/ocpu/tmp/x000a0fb8/console
/ocpu/tmp/x000a0fb8/info
$ curl http://localhost:7177/ocpu/library/base/R/as.list/json -d "x=x000a0fb8"
{
"xx" : [
1,
2,
3
],
"yy" : [
6,
7,
8
]
}
3 つの質問:
OpenCPU 自動 JSON 化のデフォルトの動作を列ベースに変更する方法はありますか?
デフォルトで行ベースになっている理由はありますか (「何かをデフォルトにする必要があった」以外に) ? (基盤と効率をよりよく理解できるようにするためであり、挑戦を意図したものではありません。)
ただし、JSON 出力を受け入れるほとんどの (すべてではないにしても) ライブラリは、フォーマット間を透過的に理解し、変換するため、これはすべて学術的なものです。右?
(Win7 x64、R 3.0.3、opencpu 1.2.3、jsonlite 0.9.4)
(PS: ありがとう、Jeroen、OpenCPU は最高です! プレイすればするほど、もっと好きになります。)