[R-pkg-devel] S3 is.unsorted registration
Sokol Serguei
@ergue|@@oko| @end|ng |rom gm@||@com
Thu Sep 9 20:11:44 CEST 2021
On 09/09/2021 18:23, Hugh Parsonage wrote:
> I would like to register an S3 method for `is.unsorted` for my
> package's class "factor256" but I'm having trouble honouring the
> `strictly` argument. I've defined
>
> is.unsorted.factor256 <- function(x, na.rm = FALSE, strictly = FALSE) {
> strictly
> }
>
> i.e. the class is sorted iff strictly = TRUE
>
> However, the strictly argument appears to be ignored
>
> x <- integer(2)
> class(x) <- "factor256"
>
> is.unsorted(x) # FALSE [expected]
> is.unsorted(x, strictly = TRUE) # FALSE [unexpected]
>
> The method is definitely being dispatched as when I change the function to
>
> is.unsorted.factor256 <- function(x, na.rm = FALSE, strictly = FALSE) {
> cat("dispatching\n")
> strictly
> }
>
> I see the dispatch:
>
> is.unsorted(ff, strictly = T)
> #> dispatching
> #> [1] FALSE
Moreover, if I define
is.unsorted.factor256 <- function(x, na.rm = FALSE, strictly = FALSE) {
cat("dispatching\n")
print(match.call())
strictly
}
I get:
is.unsorted(ff, strictly = T)
# dispatching
# is.unsorted.factor256(x = x, na.rm = strictly)
# [1] FALSE
While defining not a method but a classic function works as expected:
f=function(x, na.rm = FALSE, strictly = FALSE) {
cat("f\n")
print(match.call())
strictly
}
f(ff, strictly=T)
# f
# f(x = ff, strictly = T)
# [1] TRUE
Just my 0.02 €
Serguei.
> and
>
>> methods("is.unsorted")
> [1] is.unsorted.factor256
> see '?methods' for accessing help and source code
>
> I note that if I omit the na.rm = argument I will get the intended
> result (I was drawn to the solution by noting the .Internal call has
> omitted it) but I'm wondering whether this is correct.
>
>
> Best,
>
>
> Hugh Parsonage.
>
> ______________________________________________
> R-package-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel
More information about the R-package-devel
mailing list