2014-10-16 14 views
17

आर is.vector है, पता लगाने के लिए is.list, is.integer, is.double, is.numeric, is.factor, is.character, आदि क्यों नहीं is.POSIXct, is.POSIXlt या is.Date है?विश्वसनीय तरीका अगर एक data.frame में एक स्तंभ is.POSIXct

मुझे POSIXct ऑब्जेक्ट का पता लगाने के लिए एक विश्वसनीय तरीका चाहिए, और class(x)[1] == "POSIXct" वास्तव में लगता है ... गंदा।

+3

यदि आप _do_ बस कक्षा की जांच करते हैं, तो 'विरासत' शायद क्लीनर महसूस करेगा। बेशक – joran

उत्तर

17

मैं व्यक्तिगत रूप से सिर्फ प्रयोग करेंगे inheritsjoran के रूप में सुझाव दिया। आप इसे अपने is.POSIXct फ़ंक्शन बनाने के लिए उपयोग कर सकते हैं।

# functions 
is.POSIXct <- function(x) inherits(x, "POSIXct") 
is.POSIXlt <- function(x) inherits(x, "POSIXlt") 
is.POSIXt <- function(x) inherits(x, "POSIXt") 
is.Date <- function(x) inherits(x, "Date") 
# data 
d <- data.frame(pct = Sys.time()) 
d$plt <- as.POSIXlt(d$pct) 
d$date <- Sys.Date() 
# checks 
sapply(d, is.POSIXct) 
# pct plt date 
# TRUE FALSE FALSE 
sapply(d, is.POSIXlt) 
# pct plt date 
# FALSE TRUE FALSE 
sapply(d, is.POSIXt) 
# pct plt date 
# TRUE TRUE FALSE 
sapply(d, is.Date) 
# pct plt date 
# FALSE FALSE TRUE 
12

lubridate पैकेज is.POSIXt, is.POSIXct, is.POSIXlt, और is.Date कार्य करती है।

+0

। मैं इसे आधार आर में करने की कोशिश कर रहा हूं और लुब्र्रिडेट के बारे में भूल गया हूं। – Zach

+1

यदि 'x <- as.POSIXlt (Sys.time())', तो 'है। POSIXt (x)' 'TRUE' है, भले ही' x' POSIXct नहीं है ... –

+0

'is.POSIXt' सत्य लौटाता है यदि वर्ग या तो 'POSIXlt' या' POSIXct' है। – eipi10

3

आप is() आज़मा सकते हैं। यह lubridate फ़ंक्शंस is.Date और is.POSIX* वैसे भी भरोसा करता है।

x <- Sys.time() 
class(x) 
# [1] "POSIXct" "POSIXt" 
is(x, "Date") 
#v[1] FALSE 
is(x, "POSIXct") 
# [1] TRUE 

y <- Sys.Date() 
class(y) 
# [1] "Date" 
is(y, "POSIXct") 
# [1] FALSE 
is(y, "Date") 
# [1] TRUE 
+1

यह नहीं कि यह वास्तव में इस मामले में महत्वपूर्ण है, लेकिन 'विरासत' को एस 3 के लिए डिज़ाइन किया गया था और सीधे सी कोड पर चला गया, जबकि 'एस' को एस 4 को संभालने की आवश्यकता है और अन्य आर कार्यों में कई कॉल करता है। –

संबंधित मुद्दे