[Rd] methods package: A _R_CHECK_LENGTH_1_LOGIC2_=true error

Martin Maechler m@ech|er @end|ng |rom @t@t@m@th@ethz@ch
Fri Jun 28 16:03:40 CEST 2019


>>>>> Henrik Bengtsson 
>>>>>     on Thu, 27 Jun 2019 16:00:39 -0700 writes:

> Using:
> 
> untrace(methods::conformMethod)
> at <- c(12,4,3,2)
> str(body(methods::conformMethod)[[at]])
> ## language omittedSig <- omittedSig && (signature[omittedSig] != "missing")
> cc <- 0L
> trace(methods::conformMethod, tracer = quote({
>   cc <<- cc + 1L
>   print(cc)
>   if (cc == 31) {  ## manually identified
>     untrace(methods::conformMethod)
>     trace(methods::conformMethod, at = list(at), tracer = quote({
>       str(list(signature = signature, mnames = mnames, fnames = fnames))
>       print(ls())
>       try(str(list(omittedSig = omittedSig, signature = signature)))
>     }))
>   }
> }))
> loadNamespace("oligo")
> 
> gives:
> 
> Untracing function "conformMethod" in package "methods"
> Tracing function "conformMethod" in package "methods"
> Tracing conformMethod(signature, mnames, fnames, f, fdef, definition)
> step 12,4,3,2
> List of 3
>  $ signature: Named chr [1:4] "TilingFeatureSet" "ANY" "ANY" "array"
>   ..- attr(*, "names")= chr [1:4] "object" "subset" "target" "value"
>   ..- attr(*, "package")= chr [1:4] "oligoClasses" "methods" "methods" "methods"
>  $ mnames   : chr [1:2] "object" "value"
>  $ fnames   : chr [1:4] "object" "subset" "target" "value"
>  [1] "f"          "fdef"       "fnames"     "fsig"       "imf"
>  [6] "method"     "mnames"     "omitted"    "omittedSig" "sig0"
> [11] "sigNames"   "signature"
> List of 2
>  $ omittedSig: logi [1:4] FALSE TRUE TRUE FALSE
>  $ signature : Named chr [1:4] "TilingFeatureSet" "ANY" "ANY" "array"
>   ..- attr(*, "names")= chr [1:4] "object" "subset" "target" "value"
>   ..- attr(*, "package")= chr [1:4] "oligoClasses" "methods" "methods" "methods"
> Error in omittedSig && (signature[omittedSig] != "missing") :
>   'length(x) = 4 > 1' in coercion to 'logical(1)'
> Error: unable to load R code in package 'oligo'
> 

Thank you, Henrik, nice piece of using trace() .. and the above
is useful for solving the issue --  I can work with that.

I'm  already pretty sure the wrong code starts with

    omittedSig <- sigNames %in% fnames[omitted] # ....

-------------


*Still*  I cannot understand why in my case (and probably Peter,
 as he also said he can't reproduce),
the  conformMethod() function is not even called  when I run
     loadNamespace("oligo").

As conformMethod() is *only* called from setMethod(), I've
started trace()ing  setMethod() and indeed, it is *only* called one,
and not with oligo methods/generics,... 

Henrik, do you per chance not install packages in the usual way,
i.e., do you install them without saving all the pre-computed
classes and methods tables etc,
and that would be *why* these setMethod() etc are only called at
this point in time ?

Martin



More information about the R-devel mailing list