سؤال
ماذا لو كنت تريد تطبيق وظيفة بخلاف format
إلى قائمة كائنات posixct؟ على سبيل المثال ، قل أنني أريد أن آخذ متجهًا من الأوقات ، وقم باقتخص تلك الأوقات إلى الساعة ، وتطبيق وظيفة تعسفية على كل واحدة من تلك الأوقات.
> obs.times=as.POSIXct(c('2010-01-02 12:37:45','2010-01-02 08:45:45','2010-01-09 14:45:53'))
> obs.truncated=trunc(obs.times, units="hours")
> obs.truncated
[1] "2010-01-02 12:00:00 EST" "2010-01-02 08:00:00 EST"
[3] "2010-01-09 14:00:00 EST"
الآن ، أتوقع طول obs.truncated
ليكون 3 ولكن
> length(obs.truncated)
[1] 9
لذلك يمكنك أن ترى ذلك محاولة apply
وظيفة لهذا المتجه لن تعمل. فئة obs.truncated
هو
> class(obs.truncated)
[1] "POSIXt" "POSIXlt"
هل لديكم فكرة عما يحدث هنا؟؟ apply
و length
يبدو أنه يأخذ العنصر الأول من المتجه كقائمة خاصة به.
المحلول
ال length()
من مثل هذا posixlt اعتاد الإبلاغ عن تسعة ، ولكن تم تصحيح ذلك مؤخرًا.
أيضا ، عندما أفعل trunc(obs.times)
يحدث الشيء الخطأ - trunc()
يعمل مرة واحدة فقط على سلسلة من ثلاثة عناصر. أنت بحاجة apply()
وآخرون.
لذا ، إليك مثال على استخدام sapply()
مع إعادة ضبط المكون:
> sapply(obs.times, function(.) {
+ p <- as.POSIXlt(.);
+ p$min <- p$sec <- 0;
+ format(p) })
[1] "2010-01-02 12:00:00" "2010-01-02 08:00:00" "2010-01-09 14:00:00"
>
بينما
> trunc(obs.times, units="hours")
[1] "2010-01-02 12:00:00 CST" "2010-01-02 08:00:00 CST"
[3] "2010-01-09 14:00:00 CST"
> class(trunc(obs.times, units="hours"))
[1] "POSIXt" "POSIXlt"
> length(trunc(obs.times, units="hours"))
[1] 1
>
لا تنتمي إلى StackOverflow