列表子集上的mapply

时间:2017-05-16 14:39:52

标签: r sapply mapply

我正在使用data.framesmapply两个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))

我想使用两个列表在日期列上应用函数。对于此示例,请使用difftime。我想在list_1和list_2中获得listdifftime个日期列。结果如下:

$a
  difftime
1 365
2 365

$b
  difftime
1 365
2 365

我尝试使用以下列表来设置列表的子集:

subset_list_1 <- lapply(list_1, "[", 1)
subset_list_2 <- lapply(list_2, "[", 1)

但是,结果仍为data.frame。出于某种原因,通常应用drop=TRUE的{​​{1}}没有发生。

"["

然后我尝试> str(subset_list_1) List of 2 $ a:'data.frame': 2 obs. of 1 variable: ..$ date: chr [1:2] "2017-01-01" "2017-02-02" $ b:'data.frame': 2 obs. of 1 variable: ..$ date: chr [1:2] "2017-03-03" "2017-04-04" 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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我们需要使用vector代替[[提取[

Map(function(...) data.frame(difftime = as.numeric(difftime(...))), 
                lapply(list_1, `[[`, 1), lapply(list_2, `[[`, 1))