Не знаю, как сформулировать мой вопрос кратко, но здесь все идет.
Контекст: я хочу создать файл json с несколькими уровнями из фрейма данных, поэтому я сначала создаю вложенный список из моего фрейма данных.
# load libraries
library(RJSONIO)
# make data
dt <- data.frame(var1 = 1:4, var2 = c("a", "b", "c", "d"), var3 = c("foo", "bar", "foobar", "foobaz"), var4 = c(100, 200, 300, 400))
# make nested list
ll <- apply(dt, 1, function(x) list(id = x[['var1']], props = list(name = x[['var2']], altName = x[['var3']], height = x[['var4']])))
# output to JSON and print
js <- toJSON(ll); cat(js)
# output
[
{
"id": "1",
"props": {
"name": "a",
"altName": "foo",
"height": "100"
}
},
...
Все работает как положено.Но затем я хочу отфильтровать данные и по какой-то причине R вложит мой начальный список в объект, названный номером строки
# make nested list of dataframe from before but now filter on var1
dt <- dt[dt$var1 %% 2 == 0, ]
ll <- apply(dt, 1, function(x) list(id = x[['var1']], props = list(name = x[['var2']], altName = x[['var3']], height = x[['var4']])))
# output to JSON and print
js <- toJSON(ll); cat(js)
# output
{
"2": {
"id": "1",
"props": {
"name": "a",
"altName": "foo",
"height": "100"
}
}
},
...
Теперь, с помощью unname()
я могу удалить имена 2 и 4,но почему это происходит в первую очередь и есть ли способ предотвратить первоначальное именование списков?Как всегда, любая помощь приветствуется!