> 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