[Rd] methods package: A _R_CHECK_LENGTH_1_LOGIC2_=true error

peter dalgaard pd@|gd @end|ng |rom gm@||@com
Fri Jun 28 16:20:03 CEST 2019



> On 28 Jun 2019, at 16:03 , Martin Maechler <maechler using stat.math.ethz.ch> wrote:
> 
>>>>>> 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] # ....
> 
> -------------
> 

I think the intention must have been that the two "ANY" signatures should change to "missing". However, with the current logic that will not happen, because

> c(F,T,T,F) &&  c(T,T)
[1] FALSE

Henrik's non-fix would have resulted in

> c(F,T,T,F) &  c(T,T)
[1] FALSE  TRUE  TRUE FALSE

which is actually right, but only coincidentally due to recycling of c(T,T). Had it been c(F,T) then it would have been expanded to c(F,T,F,T) which would be the opposite of what was wanted.

Barring NA issues, I still think 

omittedSig[omittedSig] <- (signature[omittedSig] != "missing")

should do the trick.

-pd

> 
> *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

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd.mes using cbs.dk  Priv: PDalgd using gmail.com



More information about the R-devel mailing list