[Rd] POSIXlt matching bug
McGehee, Robert
Robert.McGehee at geodecapital.com
Tue Jun 29 16:46:06 CEST 2010
I came across the below mis-feature/bug using match with POSIXlt objects
(from strptime) in R 2.11.1 (though this appears to be an old issue).
> x <- as.POSIXlt(Sys.Date())
> table <- as.POSIXlt(Sys.Date()+0:5)
> length(x)
[1] 1
> x %in% table # I expect TRUE
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> match(x, table) # I expect 1
[1] NA NA NA NA NA NA NA NA NA
This behavior seemed more plausible when the length of a POSIXlt object
was 9 (back in the day), however since the length was redefined, the
length of x no longer matches the length of the match function output,
as specified by the ?match documentation: "A vector of the same length
as 'x'".
I would normally suggest that we add a POSIXlt method for match that
converts x into POSIXct or character first. However, match does not
appear to be generic. Below is a possible rewrite of match that appears
to work as desired.
match <- function(x, table, nomatch = NA_integer_, incomparables = NULL)
.Internal(match(if(is.factor(x)||inherits(x, "POSIXlt"))
as.character(x) else x,
if(is.factor(table)||inherits(table, "POSIXlt"))
as.character(table) else table,
nomatch, incomparables))
That said, I understand some people may be very sensitive to the speed
of the match function, and may prefer a simple change to the ?match
documentation noting this (odd) behavior for POSIXlt.
Thanks, Robert
R.version
_
platform x86_64-unknown-linux-gnu
arch x86_64
os linux-gnu
system x86_64, linux-gnu
status
major 2
minor 11.1
year 2010
month 05
day 31
svn rev 52157
language R
version.string R version 2.11.1 (2010-05-31)
Robert McGehee, CFA
Geode Capital Management, LLC
One Post Office Square, 28th Floor | Boston, MA | 02109
Tel: 617/392-8396 Fax:617/476-6389
mailto:robert.mcgehee at geodecapital.com
>This e-mail, and any attachments hereto, are intended for use by the
addressee(s) only and may contain information that is (i) confidential
information of Geode Capital Management, LLC and/or its affiliates,
and/or (ii) proprietary information of Geode Capital Management, LLC
and/or its affiliates. If you are not the intended recipient of this
e-mail, or if you have otherwise received this e-mail in error, please
immediately notify me by telephone (you may call collect), or by e-mail,
and please permanently delete the original, any print outs and any
copies of the foregoing. Any dissemination, distribution or copying of
this e-mail is strictly prohibited.
More information about the R-devel
mailing list