>>>>> peter dalgaard >>>>> on Fri, 28 Jun 2019 16:20:03 +0200 writes:
> > On 28 Jun 2019, at 16:03 , Martin Maechler <maech...@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] # .... my "pretty sure" statement above has proven to be wrong .. > > ------------- > > > > I think the intention must have been that the two "ANY" signatures should > change to "missing". Definitely. > 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. yes, (most probably). I've found a version of that which should be even easier to "read and understand", in svn commit 76753 : svn diff -c 76753 src/library/methods/R/RMethodUtils.R --- src/library/methods/R/RMethodUtils.R (Revision 76752) +++ src/library/methods/R/RMethodUtils.R (Revision 76753) @@ -342,8 +342,7 @@ gettextf("formal arguments (%s) omitted in the method definition cannot be in the signature", bad2), call. = TRUE, domain = NA) } - else if(!all(signature[omittedSig] == "missing")) { - omittedSig <- omittedSig && (signature[omittedSig] != "missing") + else if(any(omittedSig <- omittedSig & signature != "missing")) { BTW: I've marked this --- and the runmed() seg.fault + na.action change --- as something to be added to R 3.6.1 patched, as I deemed I should obey the "code freeze" rule in both cases. Martin > > *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....@cbs.dk Priv: pda...@gmail.com > > > > > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel