2017-03-15 15 views
1

tidyjson(最新のgithub、Jeremy Stanley発行)を使いこなしています。私は、並べ替えられた配列を自動的に検索して抽出するようにしたいと思っていました。以下の例は私が望む出力を提供します。R(Tidyjson)の関数に文字変数を渡す

'{"name": {"first": "bob", "last": "jones"}, "age": 32}' %>% 
enter_object("name") %>% 
gather_keys %>% 
append_values_string 

'{"name": {"first": "bob", "last": "jones"}, "age": 32}' %>% 
enter_object(name) %>% 
gather_keys %>% 
append_values_string 

これらは、同じ出力の両方与える:私は前に文字変数を宣言すると、それは失敗に沿って、それを渡すと、しかし

# A tbl_json: 2 x 3 tibble with a "JSON" attribute 
`attr(., "JSON")` document.id key string 
      <chr>  <int> <chr> <chr> 
1    "bob"   1 first bob 
2   "jones"   1 last jones 

を。

object_name <- "name" 
'{"name": {"first": "bob", "last": "jones"}, "age": 32}' %>% 
enter_object(list(name="name")) %>% 
gather_keys %>% 
append_values_string 

Error: Path components must be single names or character strings 

これが起こる理由はありますか?

答えて

0

あなたはハドレーの本Advanced Rに精通している場合、これは残念ながら、現在(私はもっとdplyrのように、標準の評価を使用していますenter_object_を好む)純粋tidyjsonに回避策を持っていない非標準的な評価の一部です。あなたが示唆しているように、これらの種類のプログラムをベクトル化して自動化するのはいいと思うので、ある時点でその機能が使えることを期待しています。

非標準評価は、引用符で囲まれていないnameを渡すことができ、nameというオブジェクトを探しているプログラムではなく、2番目の例でも良い結果を得られる「魔法」です。あなたのケースでは、object_nameのようなオブジェクトは解決されないという危険性があります。あなたが仕事アラウンドできdo.callとパラメータのリストと思われる、と述べた

(私はそれが少しゆがんで行ったと思いとして、私は、あなたの一例を固定)

library(tidyjson) 

json <- "{\"name\": {\"first\": \"bob\", \"last\": \"jones\"}, \"age\": 32}" 
object_name <- "name" 

do.call(enter_object, args = list(json, object_name)) %>% gather_object %>% 
    append_values_string 
#> # A tbl_json: 2 x 3 tibble with a "JSON" attribute 
#> `attr(., "JSON")` document.id name string 
#>    <chr>  <int> <chr> <chr> 
#> 1   "\"bob\""   1 first bob 
#> 2  "\"jones\""   1 last jones 

私は間違いのいくつかをチェックアウトをお勧めします開発バージョンtidyjsonの新機能/機能はdevtools::install_github('jeremystan/tidyjson')ですが、残念ながら "path"の標準評価はまだサポートされていません。

関連する問題