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

时间:2017-11-28 12:44:23

标签: r list date mapply

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

3 个答案:

答案 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"