2016-12-06 17 views
2

時,使用R的原始c功能,結合當前日期時間與NULL給出:如何在R中正確組合POSIXct對象和NULL?

> class(c(NULL,Sys.time())) 
[1] "numeric" 

但是傳遞NULL最後時:

> class(c(Sys.time(),NULL)) 
[1] "POSIXct" "POSIXt" 

是這個打算?爲c文檔讀取: 「的輸出類型是從最高類型的組件的層次結構中的NULL <原始<邏輯<整數<雙<複雜<字符<列表<表達來確定。」但沒有提到訂單相關。

POSIXct類與NULL類的對象合併到一個向量中是否有更好的(更一致的)方法?還是應該總是明確地測試NULL並將其作爲一個單獨的案例處理?

回答

2

這是因爲c充當S3通用的,並有一個POSIXct方法爲它:

> c.POSIXct 
function (..., recursive = FALSE) 
.POSIXct(c(unlist(lapply(list(...), unclass)))) 
<bytecode: 0x000001ab3e6efe58> 
<environment: namespace:base> 

(S3方法分派的類的第一個參數的,所以c(POSIXct, NULL)將調用c.POSIXct,而c(NULL, POSIXct)將調用默認方法。)