2016-12-21 3 views
0

У меня есть следующий список mylist в RI. Я возвращаюсь из aps aps, который я пытаюсь изменить, перед запуском функции jsonlite::rbind.pages(), потому что есть вложенный фреймворк данных, который имеет 0 входных данных возвращаемые значения. Когда я пытаюсь запустить функцию rbindpages, она возвращает 3 результата, а не 4, исключая блок данных с 0 значениями. Как я могу вставить значения в это, чтобы при использовании rbind.pages() я получил все 4 результата? Цель состоит в том, чтобы затем использовать cbind() для слияния с другими векторами.Вставка символов во вложенный список из запроса JSON

вот Ouput из консоли:

[[1]] 
         id name pluralName shortName           icon.prefix icon.suffix primary 
1 4bf58dd8d48988d1fa931735 Hotel  Hotels  Hotel https://ss3.4sqi.net/img/categories_v2/travel/hotel_  .png TRUE 

[[2]] 
         id  name pluralName shortName           icon.prefix icon.suffix primary 
1 4bf58dd8d48988d10f951735 Pharmacy Pharmacies Pharmacy https://ss3.4sqi.net/img/categories_v2/shops/pharmacy_  .png TRUE 

[[3]] 
data frame with 0 columns and 0 rows 

[[4]] 
         id   name  pluralName  shortName            icon.prefix 
1 52e81612bcbc57f1066b7a32 Cultural Center Cultural Centers Cultural Center https://ss3.4sqi.net/img/categories_v2/building/default_ 
    icon.suffix primary 
1  .png TRUE 

здесь является dput:

mylist = list(structure(list(id = "4bf58dd8d48988d1fa931735", name = "Hotel", 
        pluralName = "Hotels", shortName = "Hotel", icon = structure(list(
         prefix = "https://ss3.4sqi.net/img/categories_v2/travel/hotel_", 
         suffix = ".png"), .Names = c("prefix", "suffix"), class = "data.frame", row.names = 1L), 
        primary = TRUE), .Names = c("id", "name", "pluralName", "shortName", 
               "icon", "primary"), class = "data.frame", row.names = 1L), structure(list(
                id = "4bf58dd8d48988d10f951735", name = "Pharmacy", pluralName = "Pharmacies", 
                shortName = "Pharmacy", icon = structure(list(prefix = "https://ss3.4sqi.net/img/categories_v2/shops/pharmacy_", 
                           suffix = ".png"), .Names = c("prefix", "suffix"), class = "data.frame", row.names = 1L), 
                primary = TRUE), .Names = c("id", "name", "pluralName", "shortName", 
                       "icon", "primary"), class = "data.frame", row.names = 1L), structure(list(), .Names = character(0), row.names = integer(0), class = "data.frame"), 
    structure(list(id = "52e81612bcbc57f1066b7a32", name = "Cultural Center", 
        pluralName = "Cultural Centers", shortName = "Cultural Center", 
        icon = structure(list(prefix = "https://ss3.4sqi.net/img/categories_v2/building/default_", 
              suffix = ".png"), .Names = c("prefix", "suffix"), class = "data.frame", row.names = 1L), 
        primary = TRUE), .Names = c("id", "name", "pluralName", 
               "shortName", "icon", "primary"), class = "data.frame", row.names = 1L), 
    structure(list(id = "4bf58dd8d48988d1e0931735", name = "Coffee Shop", 
        pluralName = "Coffee Shops", shortName = "Coffee Shop", 
        icon = structure(list(prefix = "https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_", 
              suffix = ".png"), .Names = c("prefix", "suffix"), class = "data.frame", row.names = 1L), 
        primary = TRUE), .Names = c("id", "name", "pluralName", 
               "shortName", "icon", "primary"), class = "data.frame", row.names = 1L)) 

я заметил, когда охота на условный фильтр, работающий nchar(mylist[3]) я получаю '6' так что моя мысль должен был запустить что-то вроде следующего, чтобы определить «фрейм данных 0», а затем вставить символы. Просто концепция, хотя любая помощь приветствуется!

mylist = lapply(mylist, function (x) { 
     if (nchar(x) == 6) { 

     x== data.frame(
      list(id = "4bf58dd8d48988d1e0931735", name = "Not avaliable", 
       pluralName = "Not avaliable", shortName = "Not avaliable", 
       icon = "https://ss3.4sqi.net/img/categories_v2/food", prefix = "https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_", 
       suffix = ".png") 
     ) 
     } else { 
     x 
     } 
    }) 

EDIT ************** используя предложение от комментария я получил следующее:

[[11]] 
[[11]][[1]] 
         id name pluralName shortName           icon.prefix icon.suffix primary 
1 4bf58dd8d48988d1fa931735 Hotel  Hotels  Hotel https://ss3.4sqi.net/img/categories_v2/travel/hotel_  .png TRUE 


[[12]] 
NULL 

[[13]] 
[[13]][[1]] 
         id  name pluralName shortName            icon.prefix icon.suffix 
1 52e81612bcbc57f1066b7a33 Social Club Social Clubs Social Club https://ss3.4sqi.net/img/categories_v2/building/default_  .png 
    primary 
1 TRUE 

Я побежал jsonlite::rbind.pages() и получил Error: all(vapply(pages, is.data.frame, logical(1))) is not TRUE

+0

Yo u может просто вставить 'NULL', поскольку' rbind (NULL, df) 'возвращает' df'. 'lapply (mylist, function (x) ifelse (nrow (x) == 0, NULL, x))' – Jean

+0

не работает. Я добавил результат в редактирование, чтобы вы могли видеть, что вышло, – LoF10

+1

, исходя из вашего первоначального подхода, попробуйте: 'mylist = lapply (mylist, function (x) { if (length (x) == 0) { x <- data.frame ( list (id = "4bf58dd8d48988d1e0931735", name = "Недоступно", pluralName = "Недоступно", shortName = "Недоступно", icon = "https: //ss3.4sqi. net/img/categories_v2/food ", prefix =" https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_ ", suffix =" .png ") ) } else { x <- x } }) ' –

ответ

0

Исходя из того, что предложил Конвей, сделал несколько хитростей к его ответу, и это сработало:

mylist = lapply(mylist, function (x) { 
    if (length(x) == 0) { 
     x<- data.frame(list(id = "00000000000000000", 
          name = "Not avaliable", 
           pluralName = "Not avaliable", 
          shortName = "Not avaliable", 
          icon.prefix = "https://ss3.4sqi.net/img/categories_v2/food", 
          icon.suffix = ".png", 
          primary = "TRUE")) 
     } else { 
     x <- x } })