2017-03-15 2 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 

이 모두 동일한 출력을 제공 : I는 이전 문자 변수를 선언하고 실패 함께 전달할 경우

# 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 

왜 그런가?

당신은 해들리의 책 Advanced R 잘 알고있는 경우

답변

0

,이 (내가 더 dplyr 같은 표준 평가를 사용하는 enter_object_를 선호) 불행하게도 현재 순수 tidyjson의 해결 방법이없는 비표준 평가의 한 부분이다. 내가 제안한 바에 따르면, 이런 종류의 프로그램을 벡터화하고 자동화하는 것이 좋을 것이므로,이 기능을 사용할 수 있기를 희망합니다.

비표준 평가는 인용 부호가없는 name을 전달하고 (name이라는 객체를 찾는 프로그램 대신) 두 번째 예제에서 여전히 좋은 결과를 얻을 수있게 해주는 "마법"입니다. 귀하의 경우에는 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"의 표준 평가는 아직 지원되지 않습니다.