У меня есть список списков, и я ищу подходящий метод для добавления нового списка в этот список на основе хронологического порядка. Вот пример:Как вставить элемент в середине неназванного списка на основе хронологических дат
my_list <- list(list("text" = list("headline" = "Hello, World!",
"text" = "This is some text"),
"start_date" = list("year" = 2015,
"month" = "01",
"day" = "01")),
list("text" = list("headline" = "Hola, Mundo!",
"text" = "Este es algo palabras"),
"start_date" = list("year" = 2015,
"month" = "01",
"day" = "03")))
Теперь, если я хочу, чтобы добавить новый элемент в этот список, где, скажем, start_date является 2015-01-02, я хочу, чтобы добавить его в середину списка при индексе 2 и нажмите 2-й элемент «вниз». Если start_date был в 2014-12-31, тогда я бы хотел его в самом начале и нажать все остальное «вниз», и если бы это было после 2015-01-03, я бы хотел его в конце. Есть ли более эффективный метод для этого, чем следующий?
new_list_item <- list("text" = list("headline" = "Bonjour le monde", "text" = "ceci est un texte"), "start_date" = list("year" = 2015, "month" = "01", "day" = "02"))
counter <- 0
index <- lapply(my_list, function(elem) {
date1 <- as.Date(paste(elem$start_date$year, elem$start_date$month, elem$start_date$day, sep = "-"))
date2 <- as.Date(paste(new_list_item$start_date$year, new_list_item$start_date$month, new_list_item$start_date$day, sep = "-"))
counter <<- counter + 1
if (date2 > date1) {
return(NULL)
} else {
return(counter)
}
})
index <- min(unlist(index)[!is.null(index)])
my_list <- list(my_list[1:(index - 1)], new_list_item, my_list[index:length(my_list)])
Тем более, что описанный выше метод добавляет дополнительную индексацию элементов списка (т.е. [[1]][[1]]$text
против [[1]]$text
), которая не является идеальным. Любая помощь приветствуется.
Вы считали использование названных элементов списка, а не индексов? Не уверен, что вы в конечном итоге планируете делать с этими данными, поэтому, возможно, это не сработает, но часто, когда у меня возникает проблема с добавлением или удалением элементов из списка или data.frame, которые испортили бы мои индексы , Я считаю, что кодирование по имени (более надежный и надежный способ кодирования в любом случае) часто решает мою проблему. – LauraS