我有一个时差列表来表示持续时间列表
s <- c(difftime(ISOdatetime(2012,7,2,12,34,45), ISOdatetime(2012,7,2,0,0,0)),
difftime(ISOdatetime(2012,7,2,12,34,45), ISOdatetime(2012,7,3,0,0,0)),
difftime(ISOdatetime(2012,7,2,12,34,45), ISOdatetime(2012,7,4,0,0,0)))
当我在R中运行时,我会得到一个实数列表
> s <- c(difftime(ISOdatetime(2012,7,2,12,34,45), ISOdatetime(2012,7,2,0,0,0)),
+ difftime(ISOdatetime(2012,7,2,12,34,45), ISOdatetime(2012,7,3,0,0,0)),
+ difftime(ISOdatetime(2012,7,2,12,34,45), ISOdatetime(2012,7,4,0,0,0)))
> print(s)
[1] 12.579167 -11.420833 -1.475868
使用.Internal(inspect(s))我看到了
> .Internal(inspect(s))
@0x0000000009c5aec8 14 REALSXP g0c3 [NAM(2)] (len=3, tl=0) 12.5792,-11.4208,-1.47587
但是,如果我制作单个timediff,我会
t <- difftime(ISOdatetime(2012,7,2,12,34,45), ISOdatetime(2012,7,2,0,0,0))
。内部(检查(t))的
> .Internal(inspect(t))
@0x000000000a108868 14 REALSXP g0c1 [OBJ,NAM(2),ATT] (len=1, tl=0) 12.5792
ATTRIB:
@0x0000000009e27e18 02 LISTSXP g0c0 []
TAG: @0x000000000323be68 01 SYMSXP g0c0 [MARK,NAM(2),LCK,gp=0x4000] "units" (has value)
@0x000000000a104770 16 STRSXP g0c1 [NAM(2)] (len=1, tl=0)
@0x000000000a144818 09 CHARSXP g0c1 [MARK,gp=0x61] [ASCII] [cached] "hours"
TAG: @0x0000000000130558 01 SYMSXP g0c0 [MARK,NAM(2),LCK,gp=0x4000] "class" (has value)
@0x000000000a1046e0 16 STRSXP g0c1 [NAM(2)] (len=1, tl=0)
@0x00000000003aa8b0 09 CHARSXP g0c2 [MARK,gp=0x61] [ASCII] [cached] "difftime"
所以我想知道当你看到s而不仅仅是一个REALSXP的载体时,它是否仍然可以知道你有一个difftime的向量
这样
Rf_inherit(s,"difftime")
会返回true
答案 0 :(得分:2)
更新到R 3.0.0,其中包含用于difftimes的c
方法,或使用更高效的方法:
s <- difftime(c(ISOdatetime(2012,7,2,12,34,45),ISOdatetime(2012,7,2,12,34,45),ISOdatetime(2012,7,2,12,34,45)),
c(ISOdatetime(2012,7,2,0,0,0), ISOdatetime(2012,7,3,0,0,0), ISOdatetime(2012,7,4,0,0,0)),
units = "hour")
这构造了两个POSIXct向量,并以矢量化方式计算时间差(使用R 3.2.3测试,您的方法失败)。
由于ISOdatetime
也是矢量化的,您还可以更有效地构造POSIXct向量,例如ISOdatetime(2012,7,2:4,0,0,0)
。