2016-04-25 6 views
1

JSON(jsonliteライブラリから)をベクトル化すると、私は非常に特殊な動作を観察します。JSONをベクトル化してjsonのリストに適用すると、非常に特殊な動作が発生する

以下は、fromSSON関数をベクトル化するためのコードです。

library(jsonlite) 
vectorize_json = Vectorize(fromJSON) 

私は3つのリストに同じjsonlite関数を適用しました。 1つのjsonリストは小さく(35個の観測値)、2番目のリストは非常に大きい(122654個の観測値)。最初のリストは2番目のリストの一部です。 3番目のリストはカスタムビルドjsonリストです。

カスタムビルドjsonリストは次のとおりです。

json_list_3 <- c('{"Active": "FALSE", "MARKED": [{"Name":"tom", "age": "23", "hight": "130"}, {"Name":"tim", "age": "25", "hight": "160"}], "date":{"today":"April", "day":"15"}}', '{"Active": "FALSE", "MARKED": [{"Name":"tom", "age": "23", "hight": "130"}, {"Name":"tim", "age": "25", "hight": "160"}], "date":{"today":"April", "day":"15"}}', '{"Active": "FALSE", "MARKED": [{"Name":"tom", "age": "23", "hight": "130"}, {"Name":"tim", "age": "25", "hight": "160"}], "date":{"today":"April", "day":"15"}}') 

第一及び第二のリストには、各JSON内のリストとデータフレームを含むはるかに複雑で大規模なJSONを含むあります。 json_list_1には35回の観測があります。 json_list_2は122654の観測値を持っています)

parse_list_1 <- vectorize_json(json_list_1) 
parse_list_2 <- vectorize_json(json_list_2) 
parse_list_3 <- vectorize_json(json_list_3) 

ここで、Rstudioの環境変数情報を比較します。 以下のものが見つかりました。

parse_list_1は、値が大きい行列(385要素)の行列型です。 parse_list_2はリスト型で、値が大きい行列(122654要素)です。 parse_list_3は行列型であり、リストの値は9です。

parse_list_2は私が望むように動作するリストです。それは元のリストと同じ数の観察を有する。 jsonをリストとして管理します。だから、後で私が望むようにリストにアクセスすることができます。

ここで、parse_list_1とparse_list_3は、私が望むように動作しません。両方のリストには、私が望むすべてのデータがあります。しかし、私はそれらを見ようとすると、転置として表示されます。彼らはリストとして持っていない。すべての機能名(json内の変数)が失われたり、機能名を使用してアクセスできません。

私は間違っていますか?私はなぜこの独特の行動を知りたいのですか? フィーチャ名を使用したアクセスとしてリストとして変換するにはどうすればよいですか(json_list_3の例はアクティブとMARKEDです)。

私は

enter image description here

しかし、私は以下の結果を得て、そして$

enter image description here 出力のおかげで

+1

質問が更新されました。ありがとうございます。 –

+1

素晴らしいです。 OKだから '$'を使うことはできませんが、インデックスで要素にアクセスすることは可能です。 'lapply(parse_list_3、fromJSON)'を使って、あなたが期待した/希望する出力として示したものと似た結果を得ます。あなたはそれを試しましたか? –

+0

それは私が欲しいものを正確にしません。しかし、それは私がコードを使用して変更できるほど近いです。今私は122kの観測があるときにどの方法がより速い結果を出すかを理解しなければならない。しかし、私の質問は残っています.JSON関数をベクトル化するときにこのような特異な振る舞いが見られる理由 –

答えて

0

変更を使用することはできませんよ、parse_list_3に次のような結果を見てみたいですこの動作は、ベクトル化でという簡略化という引数が原因です。 SIMPLIFYのデフォルトの引数はTRUEです。したがって、私はベクトル化された関数が小さなリストを行列に変換できると信じています。しかし、それは大きなリストに来たとき。行列に変換できませんでした。したがって、ベクトル化関数で引数SIMPLIFY = FALSEを渡すと、同じ一貫性のある結果が得られます。コードの変更は次のようになります。

関連する問題