> dates <- as.Date(c("2013-01-01", "2013-01-02"))
> class(dates)
[1] "Date"
> for(d in dates) print(class(d))
[1] "numeric"
[1] "numeric"
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
Date
矢量被强迫,numeric
因为Date
物体不是严格的矢量".那么如何确定Date
应该被胁迫numeric
呢?Ari*_*man 13
这里有两个问题.一个是输入是否被强制转换Date
为numeric
.另一个是输出是否被强制转换numeric
.
输入
For循环强制Date
输入numeric
,因为@DWin和@JoshuaUlrich指出,for
循环占用vectors
,而Date
s在技术上不是向量.
> for(d in dates) print(class(d))
[1] "numeric"
[1] "numeric"
Run Code Online (Sandbox Code Playgroud)
另一方面,lapply
它的简化后代sapply
没有这样的限制.
> sapply( dates, function(day) class(day) )
[1] "Date" "Date"
Run Code Online (Sandbox Code Playgroud)
产量
然而!class()
上面的输出是一个字符.如果您尝试实际返回日期对象,sapply
则不是您想要的.
lapply
不强迫矢量,但sapply
确实:
> lapply( dates, identity )
[[1]]
[1] "2013-01-01"
[[2]]
[1] "2013-01-02"
> sapply( dates, identity )
[1] 15706 15707
Run Code Online (Sandbox Code Playgroud)
那是因为sapply
简化功能将输出强制转换为矢量.
摘要
所以:如果你有一个Date
对象并想要返回一个非Date
对象,你可以使用lapply
或sapply
.如果您有非Date
对象,并且想要返回一个Date
对象,则可以使用for
循环或lapply
.如果您有一个Date
对象并想要返回一个Date
对象,请使用lapply
.
学习更多的资源
如果你想深入研究向量,你可以从John Cook的笔记开始,继续使用R Inferno,继续使用SDA.
归档时间: |
|
查看次数: |
3012 次 |
最近记录: |