У меня есть список списков переменной длины. Первое значение каждого вложенного списка - это ключ, а остальные значения в списке - это запись массива. Это выглядит примерно так:R: jsonlite - ключ экспорта: пары значений из списка списков
[[1]]
[1] "Bob" "Apple"
[[2]]
[1] "Cindy" "Apple" "Banana" "Orange" "Pear" "Raspberry"
[[3]]
[1] "Mary" "Orange" "Strawberry"
[[4]]
[1] "George" "Banana"
Я извлеченный ключи и записи следующим образом:
keys <- lapply(x, '[', 1)
entries <- lapply(x, '[', -1)
, но теперь у меня есть это, я не знаю, как я могу связать ключ: пара значений в R, не создавая сначала матрицу, но это глупо, так как мои данные не помещаются в прямоугольник в любом случае (каждый пример, который я видел, использует имена столбцов из матрицы в качестве значений ключа).
Это мой дрянной метод, используя матрицу, назначая имена ростов, а затем используя jsonLite для экспорта в JSON.
#Create a matrix from entries, without recycling
#I found this function on StackOverflow which seems to work...
cbind.fill <- function(...){
nm <- list(...)
nm <- lapply(nm, as.matrix)
n <- max(sapply(nm, nrow))
do.call(cbind, lapply(nm, function (x)
rbind(x, matrix(, n-nrow(x), ncol(x)))))
}
#Call said function
matrix <- cbind.fill(entries)
#Transpose the thing
matrix <- t(matrix)
#Set column names
colnames(matrix) <- keys
#Export to json
json<-toJSON(matrix)
Результат хороший, но реализация сосет. Результат:
[{"Bob":["Apple"],"Cindy":["Apple","Banana","Orange","Pear","Raspberry"],"Mary":["Orange","Strawberry"],"George":["Banana"]}]
Просьба сообщить мне о лучших способах, которые могут существовать для достижения этого.
Как насчет: 'имена (записи) <- unlist (keys); toJSON (записи) '. (или использовать 'sapply' при получении ключей, чтобы избежать необходимости' unlist() '). – Jthorpe
Это именно то, что я искал, но не смог найти поисковую систему. Спасибо за предложения. Вы хотите создать ответ, чтобы я принял его? – Tsaari