J'essaie d'ajouter une liste de dates à une liste de listes telles que myList
ci-dessous. Cela fonctionne comme prévu, sauf que le format de date pour l'élément de date dans chaque élément de liste est perdu. Des idées?
myList<-list(list("event"="A"),
list("event"="B"),
list("event"="C"))
dates<-as.Date(c("2011-06-05","2012-01-12","2016-05-09"))
outList<-mapply(FUN="c",myList,eventDate=as.list(dates),SIMPLIFY = FALSE)
Je cherche à réaliser ce qui suit
[[1]]
[[1]]$event
[1] "A"
[[1]]$eventDate
[1] "2011-06-05"
[[2]]
[[2]]$event
[1] "B"
[[2]]$eventDate
[1] "2012-01-12"
[[3]]
[[3]]$event
[1] "C"
[[3]]$eventDate
[1] "2016-06-09"
3 réponses
En utilisant Map
, vous pouvez également créer une petite fonction (lambda) comme ceci:
myList <- list(
list(event = "A"),
list(event = "B"),
list(event = "C")
)
dates <- as.Date(c("2011-06-05", "2012-01-12", "2016-05-09"))
outList <- Map(f = function(origList, date) {
origList$eventDate <- date
return(origList)
}, myList, dates)
outList
#> [[1]]
#> [[1]]$event
#> [1] "A"
#>
#> [[1]]$eventDate
#> [1] "2011-06-05"
#>
#>
#> [[2]]
#> [[2]]$event
#> [1] "B"
#>
#> [[2]]$eventDate
#> [1] "2012-01-12"
#>
#>
#> [[3]]
#> [[3]]$event
#> [1] "C"
#>
#> [[3]]$eventDate
#> [1] "2016-05-09"
La raison pour laquelle vous obtenez les dates converties en nombres est que la fonction c
convertit tous les éléments vers le type commun le plus bas (généralement des caractères, dans ce cas numériques).
Par exemple:
c(123, as.Date("2016-01-01"))
#> [1] 123 16801
Un wrapper de liste supplémentaire pour isoler chaque élément Date fonctionnera également ici. J'ai construit cela en exécutant un lapply
avec la fonction list
sur le vecteur de dates:
Map("c", myList, eventDate=lapply(dates, list))
[[1]]
[[1]]$event
[1] "A"
[[1]]$eventDate
[1] "2011-06-05"
[[2]]
[[2]]$event
[1] "B"
[[2]]$eventDate
[1] "2012-01-12"
[[3]]
[[3]]$event
[1] "C"
[[3]]$eventDate
[1] "2016-05-09"
Il peut être préférable d'indexer car c
pourrait le contraindre à une valeur de stockage entière
for(i in seq_along(myList)) myList[[i]][['eventDate']] <- dates[i]
Questions connexes
De nouvelles questions
r
R est un langage de programmation et un environnement logiciel libres et open source pour le calcul statistique, la bioinformatique, la visualisation et le calcul général. Veuillez fournir des exemples minimaux et reproductibles ainsi que le résultat souhaité. Utilisez dput () pour les données et spécifiez tous les packages non basiques avec des appels à library (). N'incorporez pas d'images pour les données ou le code, utilisez plutôt des blocs de code en retrait. Pour les questions relatives aux statistiques, utilisez https://stats.stackexchange.com.