> 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()获取日期!R:f(x)!= sapply(x,f) - 缺陷或特征?
> 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()获取日期!R:f(x)!= sapply(x,f) - 缺陷或特征?
> lapply(20110606, f)
[[1]]
[1] "2011-06-06"
> unlist(lapply(20110606, f))
[1] 15131
sapply
unlists lapply,这样做unclasses
> unclass(lapply(20110606, f)[[1]])
[1] 15131
> class(lapply(20110606, f)[[1]])
[1] "Date"
为@Joshua李晶指出,没有必要使用应用型功能但是利息的日期
d <- 20110606 + 0:10
do.call("c",lapply(d, f))
会一种可能的方式来“排除”日期
我需要获取一个向量以将其附加到数据框。我该怎么办? – user1513008 2012-07-09 20:18:49
用'c'做'do.call'是一个方便的提示。不过,遗憾的是,没有“unlist”或“sapply”这个并不是不成立的。 – seancarmody 2012-08-05 21:38:55
您使用的功能创建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"
记录在'?sapply'中:“值:...一个原子向量或矩阵或长度与'X'相同的列表'。 Date类不是原子的(原子类型在后面的段落中引用)。这与您无法使用Date向量作为for循环中的迭代器的原因是一样的。 – 2012-07-09 20:16:42