将日期列表附加到列表列表会删除日期格式

Appending list of dates to list of lists removes date format

我正在尝试将日期列表附加到列表列表中,例如下面的 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"

索引可能更好,因为 c 可以将其强制为整数存储值

for(i in seq_along(myList)) myList[[i]][['eventDate']] <- dates[i]

使用 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

用于隔离每个 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"