我试图将日期列表附加到列表列表中,例如下面的myList
。这是按预期工作的,除了每个列表元素中的日期元素的日期格式丢失。有什么想法吗?
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)
我希望实现以下目标
[[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"
答案 0 :(得分:4)
索引可能更好,因为c
可以将其强制转换为整数存储值
for(i in seq_along(myList)) myList[[i]][['eventDate']] <- dates[i]
答案 1 :(得分:4)
使用Map
,您还可以创建一个小(lambda)函数,如下所示:
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"
您将日期转换为数字的原因是c
函数将所有元素转换为最低常见类型(通常是字符,在本例中为数字)。
例如:
c(123, as.Date("2016-01-01"))
#> [1] 123 16801
答案 2 :(得分:2)
用于隔离每个Date元素的附加列表包装器也可以在这里工作。我通过在日期向量上运行带有lapply
函数的list
来构建它:
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"