1
> f =  function(x) as.Date(as.character(x), format='%Y%m%d')
> f(20110606)
[1] "2011-06-06"
> sapply(20110606, f)
[1] 15131

为什么2个返回值不一样。我需要将此函数应用于很长的日期向量,但我没有使用 sapply() 获取日期!

4

2 回答 2

8

您用来创建的函数f已经矢量化。没有必要使用sapply,除非您在冗余部门工作。

> f <- function(x) as.Date(as.character(x), format='%Y%m%d')
> d <- 20110606 + 0:10
> f(d)
 [1] "2011-06-06" "2011-06-07" "2011-06-08" "2011-06-09"
 [5] "2011-06-10" "2011-06-11" "2011-06-12" "2011-06-13"
 [9] "2011-06-14" "2011-06-15" "2011-06-16"
于 2012-07-09T20:24:00.327 回答
7
> lapply(20110606, f)
[[1]]
[1] "2011-06-06"

> unlist(lapply(20110606, f))
[1] 15131

sapply取消列出 lapply 并在这样做时取消分类日期

> unclass(lapply(20110606, f)[[1]])
[1] 15131
> class(lapply(20110606, f)[[1]])
[1] "Date"

正如@Joshua Ulrich 所指出的,没有必要使用应用类型函数,但是出于兴趣

 d <- 20110606 + 0:10
 do.call("c",lapply(d, f))

将是“取消列出”日期的一种可能方式

于 2012-07-09T20:11:56.420 回答