У меня есть следующий список 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
Yo u может просто вставить 'NULL', поскольку' rbind (NULL, df) 'возвращает' df'. 'lapply (mylist, function (x) ifelse (nrow (x) == 0, NULL, x))' – Jean
не работает. Я добавил результат в редактирование, чтобы вы могли видеть, что вышло, – LoF10
, исходя из вашего первоначального подхода, попробуйте: '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 } }) ' –