R 列表子集的映射

R 列表子集的映射,r,sapply,mapply,R,Sapply,Mapply,我正在尝试使用两个data.frames列表,使用mapply或sapply对日期执行操作。以下是我的两份清单: list_1 <- list(a=data.frame(date=c("2017-01-01","2017-02-02"),v1=1:2, stringsAsFactors = FALSE), b=data.frame(date=c("2017-03-03","2017-04-04"),v1=3:4,

我正在尝试使用两个
data.frames
列表,使用
mapply
sapply
对日期执行操作。以下是我的两份清单:

list_1 <- list(a=data.frame(date=c("2017-01-01","2017-02-02"),v1=1:2,
                stringsAsFactors = FALSE),
               b=data.frame(date=c("2017-03-03","2017-04-04"),v1=3:4,
                stringsAsFactors = FALSE))
list_2 <- list(a=data.frame(date=c("2018-01-01","2018-02-02"),v1=1:2,
                    stringsAsFactors = FALSE),
               b=data.frame(date=c("2018-03-03","2018-04-04"),v1=3:4,
                 stringsAsFactors = FALSE))
我尝试使用以下方法创建列表子集,仅保留日期列:

subset_list_1 <- lapply(list_1, "[", 1)
subset_list_2 <- lapply(list_2, "[", 1)
然后我尝试了
mapply
sapply
,但我怀疑它抛出了一个错误,因为我没有将向量馈送到
difftime

mapply(difftime,subset_list_1,subset_list_2,SIMPLIFY = FALSE)
Error in as.POSIXct.default(time1) : 
  do not know how to convert 'time1' to class “POSIXct”

sapply(subset_list_2,difftime,subset_list_1)
Error in as.POSIXct.default(time1) : 
  do not know how to convert 'time1' to class “POSIXct”
换言之,我正在尝试使用
mapply
sapply
执行以下操作:

difftime(unclass(subset_list_2[[1]])$date,unclass(subset_list_1[[1]])$date)
Time differences in days
[1] 365 365
difftime(unclass(subset_list_2[[2]])$date,unclass(subset_list_1[[2]])$date)
Time differences in days
[1] 365 365

有什么想法吗?

我们需要使用
[
而不是
[

Map(function(...) data.frame(difftime = as.numeric(difftime(...))), 
                lapply(list_1, `[[`, 1), lapply(list_2, `[[`, 1))
difftime(unclass(subset_list_2[[1]])$date,unclass(subset_list_1[[1]])$date)
Time differences in days
[1] 365 365
difftime(unclass(subset_list_2[[2]])$date,unclass(subset_list_1[[2]])$date)
Time differences in days
[1] 365 365
Map(function(...) data.frame(difftime = as.numeric(difftime(...))), 
                lapply(list_1, `[[`, 1), lapply(list_2, `[[`, 1))