[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