Henrik Bengtsson
2019-Jun-23 18:29 UTC
[Rd] methods package: A _R_CHECK_LENGTH_1_LOGIC2_=true error
Thank you. To correct myself, I can indeed reproduce this with R --vanilla too. A reproducible example is: $ R --vanilla R version 3.6.0 Patched (2019-05-31 r76629) -- "Planting of a Tree" ...> Sys.setenv("_R_CHECK_LENGTH_1_LOGIC2_" = "true") > loadNamespace("oligo")Error in omittedSig && (signature[omittedSig] != "missing") : 'length(x) = 4 > 1' in coercion to 'logical(1)' Error: unable to load R code in package ?oligo? /Henrik On Sun, Jun 23, 2019 at 1:54 AM peter dalgaard <pdalgd at gmail.com> wrote:> > This looks obvious enough, so I just committed your fix to R-devel and R-patched. > > I'm at the wrong machine for thorough testing, but at least it seems to build OK. However, I sense some risk that this could uncover sleeping bugs elsewhere, so watch out. > > -pd > > > On 22 Jun 2019, at 18:49 , Henrik Bengtsson <henrik.bengtsson at gmail.com> wrote: > > > > DISCLAIMER: I can not get this error with R --vanilla, so it only > > occurs when some other package is also loaded. I don't have time to > > find to narrow that down for a reproducible example, but I believe the > > following error in R 3.6.0: > > > >> Sys.setenv("_R_CHECK_LENGTH_1_LOGIC2_" = "true") > >> library(oligo) > > Error in omittedSig && (signature[omittedSig] != "missing") : > > 'length(x) = 4 > 1' in coercion to 'logical(1)' > > Error: unable to load R code in package 'oligo' > > > > is because of a '_R_CHECK_LENGTH_1_LOGIC2_=true' mistake in the > > 'methods' package. Here's the patch: > > > > $ svn diff src/library/methods/R/RMethodUtils.R & > > [1] 1062 > > Index: src/library/methods/R/RMethodUtils.R > > ==================================================================> > --- src/library/methods/R/RMethodUtils.R (revision 76731) > > +++ src/library/methods/R/RMethodUtils.R (working copy) > > @@ -343,7 +343,7 @@ > > call. = TRUE, domain = NA) > > } > > else if(!all(signature[omittedSig] == "missing")) { > > - omittedSig <- omittedSig && (signature[omittedSig] != "missing") > > + omittedSig <- omittedSig & (signature[omittedSig] != "missing") > > .message("Note: ", .renderSignature(f, sig0), > > gettextf("expanding the signature to include omitted > > arguments in definition: %s", > > paste(sigNames[omittedSig], "> > \"missing\"",collapse = ", "))) > > [1]+ Done svn diff src/library/methods/R/RMethodUtils.R > > > > Maybe still in time for R 3.6.1? > > > > /Henrik > > > > ______________________________________________ > > R-devel at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > -- > 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 at cbs.dk Priv: PDalgd at gmail.com > > > > > > > > >
Martin Maechler
2019-Jun-24 10:04 UTC
[Rd] methods package: A _R_CHECK_LENGTH_1_LOGIC2_=true error
>>>>> Henrik Bengtsson via R-core >>>>> on Sun, 23 Jun 2019 11:29:58 -0700 writes:> Thank you. > To correct myself, I can indeed reproduce this with R --vanilla too. > A reproducible example is: > $ R --vanilla > R version 3.6.0 Patched (2019-05-31 r76629) -- "Planting of a Tree" > ... >> Sys.setenv("_R_CHECK_LENGTH_1_LOGIC2_" = "true") >> loadNamespace("oligo") > Error in omittedSig && (signature[omittedSig] != "missing") : > 'length(x) = 4 > 1' in coercion to 'logical(1)' > Error: unable to load R code in package ?oligo? > /Henrik Thank you Henrik, for the report, etc, but hmm... after loading the oligo package, almost 40 (non base+Recommended) packages have been loaded as well, which hence need to have been installed before, too .. which is not quite a "vanilla repr.ex." in my view Worse, I cannot reproduce : > Sys.setenv("_R_CHECK_LENGTH_1_LOGIC2_" = "true") > Sys.getenv("_R_CHECK_LENGTH_1_LOGIC2_") [1] "true" > debugonce(conformMethod) > loadNamespace("oligo") <environment: namespace:oligo> Warning messages: 1: multiple methods tables found for ?rowSums? 2: multiple methods tables found for ?colSums? 3: multiple methods tables found for ?rowMeans? 4: multiple methods tables found for ?colMeans? > sessionInfo() R Under development (unstable) (2019-06-20 r76729) (similarly with other versions of R >= 3.6.0). So, even though R core has fixed this now in the sources, it would be nice to have an "as simple as possible" repr.ex. for this. Martin > On Sun, Jun 23, 2019 at 1:54 AM peter dalgaard <pdalgd at gmail.com> wrote: >> >> This looks obvious enough, so I just committed your fix to R-devel and R-patched. >> >> I'm at the wrong machine for thorough testing, but at least it seems to build OK. However, I sense some risk that this could uncover sleeping bugs elsewhere, so watch out. >> >> -pd >> >> > On 22 Jun 2019, at 18:49 , Henrik Bengtsson <henrik.bengtsson at gmail.com> wrote: >> > >> > DISCLAIMER: I can not get this error with R --vanilla, so it only >> > occurs when some other package is also loaded. I don't have time to >> > find to narrow that down for a reproducible example, but I believe the >> > following error in R 3.6.0: >> > >> >> Sys.setenv("_R_CHECK_LENGTH_1_LOGIC2_" = "true") >> >> library(oligo) >> > Error in omittedSig && (signature[omittedSig] != "missing") : >> > 'length(x) = 4 > 1' in coercion to 'logical(1)' >> > Error: unable to load R code in package 'oligo' >> > >> > is because of a '_R_CHECK_LENGTH_1_LOGIC2_=true' mistake in the >> > 'methods' package. Here's the patch: >> > >> > $ svn diff src/library/methods/R/RMethodUtils.R & >> > [1] 1062 >> > Index: src/library/methods/R/RMethodUtils.R >> > ================================================================== >> > --- src/library/methods/R/RMethodUtils.R (revision 76731) >> > +++ src/library/methods/R/RMethodUtils.R (working copy) >> > @@ -343,7 +343,7 @@ >> > call. = TRUE, domain = NA) >> > } >> > else if(!all(signature[omittedSig] == "missing")) { >> > - omittedSig <- omittedSig && (signature[omittedSig] != "missing") >> > + omittedSig <- omittedSig & (signature[omittedSig] != "missing") >> > .message("Note: ", .renderSignature(f, sig0), >> > gettextf("expanding the signature to include omitted >> > arguments in definition: %s", >> > paste(sigNames[omittedSig], " >> > \"missing\"",collapse = ", "))) >> > [1]+ Done svn diff src/library/methods/R/RMethodUtils.R >> > >> > Maybe still in time for R 3.6.1? >> > >> > /Henrik >> > >> > ______________________________________________ >> > R-devel at r-project.org mailing list >> > https://stat.ethz.ch/mailman/listinfo/r-devel >> >> -- >> 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 at cbs.dk Priv: PDalgd at gmail.com
Henrik Bengtsson
2019-Jun-25 05:16 UTC
[Rd] methods package: A _R_CHECK_LENGTH_1_LOGIC2_=true error
**Maybe this bug needs to be understood further before applying the
patch because patch is most likely also wrong**
Because, from just looking at the expressions, I think neither the R
3.6.0 version:
omittedSig <- omittedSig && (signature[omittedSig] !=
"missing")
nor the patched version (I proposed):
omittedSig <- omittedSig & (signature[omittedSig] != "missing")
can be correct. For a starter, 'omittedSig' is a logical vector. We
see that 'omittedSig' is used to subset 'signature'. In other
words,
the length of 'signature[omittedSig]' and hence the length of
'(signature[omittedSig] != "missing")' will equal
sum(omittedSig),
i.e. the length will be in {0,1,...,length(omittedSig)}.
The R 3.6.0 version with '&&' is not correct because
'&&' requires
length(omittedSig) == 1L and sum(omittedSig) == 1L, which is unlikely
to be the original intention.
The patched version with '&' is most likely not correct either
because
'LHS & RHS' assume length(LHS) == length(RHS), unless it relies on
the
auto-expansion of either vector. So, for the '&' version to be
correct, it basically requires that length(omittedSig) = length(LHS) length(RHS)
= sum(omittedSig), which also sounds unlikely to be the
original intention.
Disclaimer: Please note that I have not at all studied the rest of the
function, so the above is just based on that single line plus
debugging that 'omittedSig' is a logical vector.
Martin, I don't have the time to dive into this further. Though I did
try to see if it happened when one of oligo's dependencies were
loaded, but that was not the case. It kicks in when oligo is loaded.
FYI, I can also replicate your non-replicatation on another R 3.6.0
version. I'll see if I can narrow down what's different, e.g.
comparing sessionInfo():s, etc. However, I want to reply with
findings above asap due to the R 3.6.1 release and you might roll back
the patch (since it might introduce other bugs as Peter mentioned).
/Henrik
On Mon, Jun 24, 2019 at 3:05 AM Martin Maechler
<maechler at stat.math.ethz.ch> wrote:>
> >>>>> Henrik Bengtsson via R-core
> >>>>> on Sun, 23 Jun 2019 11:29:58 -0700 writes:
>
> > Thank you.
> > To correct myself, I can indeed reproduce this with R --vanilla
too.
> > A reproducible example is:
>
> > $ R --vanilla
> > R version 3.6.0 Patched (2019-05-31 r76629) -- "Planting of a
Tree"
> > ...
> >> Sys.setenv("_R_CHECK_LENGTH_1_LOGIC2_" =
"true")
> >> loadNamespace("oligo")
> > Error in omittedSig && (signature[omittedSig] !=
"missing") :
> > 'length(x) = 4 > 1' in coercion to 'logical(1)'
> > Error: unable to load R code in package ?oligo?
>
> > /Henrik
>
> Thank you Henrik, for the report, etc, but
> hmm... after loading the oligo package, almost 40 (non
> base+Recommended) packages have been loaded as well, which hence
> need to have been installed before, too ..
> which is not quite a "vanilla repr.ex." in my view
>
> Worse, I cannot reproduce :
>
> > Sys.setenv("_R_CHECK_LENGTH_1_LOGIC2_" =
"true")
> > Sys.getenv("_R_CHECK_LENGTH_1_LOGIC2_")
> [1] "true"
> > debugonce(conformMethod)
> > loadNamespace("oligo")
> <environment: namespace:oligo>
> Warning messages:
> 1: multiple methods tables found for ?rowSums?
> 2: multiple methods tables found for ?colSums?
> 3: multiple methods tables found for ?rowMeans?
> 4: multiple methods tables found for ?colMeans?
> > sessionInfo()
> R Under development (unstable) (2019-06-20 r76729)
>
> (similarly with other versions of R >= 3.6.0).
>
> So, even though R core has fixed this now in the sources, it
> would be nice to have an "as simple as possible" repr.ex. for
this.
>
> Martin
>
>
>
> > On Sun, Jun 23, 2019 at 1:54 AM peter dalgaard <pdalgd at
gmail.com> wrote:
> >>
> >> This looks obvious enough, so I just committed your fix to
R-devel and R-patched.
> >>
> >> I'm at the wrong machine for thorough testing, but at
least it seems to build OK. However, I sense some risk that this could uncover
sleeping bugs elsewhere, so watch out.
> >>
> >> -pd
> >>
> >> > On 22 Jun 2019, at 18:49 , Henrik Bengtsson
<henrik.bengtsson at gmail.com> wrote:
> >> >
> >> > DISCLAIMER: I can not get this error with R --vanilla, so
it only
> >> > occurs when some other package is also loaded. I
don't have time to
> >> > find to narrow that down for a reproducible example, but
I believe the
> >> > following error in R 3.6.0:
> >> >
> >> >> Sys.setenv("_R_CHECK_LENGTH_1_LOGIC2_" =
"true")
> >> >> library(oligo)
> >> > Error in omittedSig && (signature[omittedSig] !=
"missing") :
> >> > 'length(x) = 4 > 1' in coercion to
'logical(1)'
> >> > Error: unable to load R code in package 'oligo'
> >> >
> >> > is because of a '_R_CHECK_LENGTH_1_LOGIC2_=true'
mistake in the
> >> > 'methods' package. Here's the patch:
> >> >
> >> > $ svn diff src/library/methods/R/RMethodUtils.R &
> >> > [1] 1062
> >> > Index: src/library/methods/R/RMethodUtils.R
> >> >
==================================================================>
>> > --- src/library/methods/R/RMethodUtils.R (revision 76731)
> >> > +++ src/library/methods/R/RMethodUtils.R (working copy)
> >> > @@ -343,7 +343,7 @@
> >> > call. = TRUE, domain = NA)
> >> > }
> >> > else if(!all(signature[omittedSig] ==
"missing")) {
> >> > - omittedSig <- omittedSig &&
(signature[omittedSig] != "missing")
> >> > + omittedSig <- omittedSig &
(signature[omittedSig] != "missing")
> >> > .message("Note: ", .renderSignature(f,
sig0),
> >> > gettextf("expanding the signature
to include omitted
> >> > arguments in definition: %s",
> >> > paste(sigNames[omittedSig],
"> >> > \"missing\"",collapse = ",
")))
> >> > [1]+ Done svn diff
src/library/methods/R/RMethodUtils.R
> >> >
> >> > Maybe still in time for R 3.6.1?
> >> >
> >> > /Henrik
> >> >
> >> > ______________________________________________
> >> > R-devel at r-project.org mailing list
> >> > https://stat.ethz.ch/mailman/listinfo/r-devel
> >>
> >> --
> >> 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 at cbs.dk Priv: PDalgd at gmail.com
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
Maybe Matching Threads
- methods package: A _R_CHECK_LENGTH_1_LOGIC2_=true error
- methods package: A _R_CHECK_LENGTH_1_LOGIC2_=true error
- methods package: A _R_CHECK_LENGTH_1_LOGIC2_=true error
- methods package: A _R_CHECK_LENGTH_1_LOGIC2_=true error
- methods package: A _R_CHECK_LENGTH_1_LOGIC2_=true error