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