R:f(x)!= sapply(x,f) - 错误还是功能?

use*_*008 1 r apply

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

为什么2个返回值不一样.我需要将这个函数应用于一个很长的日期向量,但我没有得到sapply()的日期!

Jos*_*ich 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"
Run Code Online (Sandbox Code Playgroud)


shh*_*its 7

> lapply(20110606, f)
[[1]]
[1] "2011-06-06"

> unlist(lapply(20110606, f))
[1] 15131
Run Code Online (Sandbox Code Playgroud)

sapply lally lally并且这样做会使日期失效

> unclass(lapply(20110606, f)[[1]])
[1] 15131
> class(lapply(20110606, f)[[1]])
[1] "Date"
Run Code Online (Sandbox Code Playgroud)

正如@Joshua Ulrich所指出的那样,无需使用应用类型函数

 d <- 20110606 + 0:10
 do.call("c",lapply(d, f))
Run Code Online (Sandbox Code Playgroud)

将是一种"取消"日期的可能方式