On 03/01/2019 3:37 p.m., Duncan Murdoch wrote:> I see this too; by bisection, it seems to have first appeared in r72943.Sorry, that was a typo. I meant r75943. Duncan Murdoch> > Duncan Murdoch > > On 03/01/2019 2:18 p.m., I?aki Ucar wrote: >> Hi, >> >> I found the following issue in r-devel (2019-01-02 r75945): >> >> `foo<-` <- function(x, value) { >> bar(x) <- value * x >> x >> } >> >> `bar<-` <- function(x, value) { >> stopifnot(all(value / x == 1)) >> x + value >> } >> >> `foo<-` <- compiler::cmpfun(`foo<-`) >> `bar<-` <- compiler::cmpfun(`bar<-`) >> >> x <- c(2, 2) >> foo(x) <- 1 >> x # should be c(4, 4) >> #> [1] 3 3 >> >> If the functions are not compiled or the stopifnot call is removed, >> the snippet works correctly. So it seems that something is messing >> around with the references to "value" when the call to stopifnot gets >> compiled, and the wrong "value" is modified. Note also that if "x <- >> 2", then the result is correct, 4. >> >> Regards, >> >
For what it's worth this also introduced > df = data.frame(v = package_version("1.2")) > rbind(df, df)$v [[1]] [1] 1 2 [[2]] [1] 1 2 instead of > rbind(df, df)$v [1] '1.2' '1.2' which shows up in Travis builds of Bioconductor packages https://stat.ethz.ch/pipermail/bioc-devel/2019-January/014506.html and elsewhere Martin Morgan ?On 1/3/19, 7:05 PM, "R-devel on behalf of Duncan Murdoch" <r-devel-bounces at r-project.org on behalf of murdoch.duncan at gmail.com> wrote: On 03/01/2019 3:37 p.m., Duncan Murdoch wrote: > I see this too; by bisection, it seems to have first appeared in r72943. Sorry, that was a typo. I meant r75943. Duncan Murdoch > > Duncan Murdoch > > On 03/01/2019 2:18 p.m., I?aki Ucar wrote: >> Hi, >> >> I found the following issue in r-devel (2019-01-02 r75945): >> >> `foo<-` <- function(x, value) { >> bar(x) <- value * x >> x >> } >> >> `bar<-` <- function(x, value) { >> stopifnot(all(value / x == 1)) >> x + value >> } >> >> `foo<-` <- compiler::cmpfun(`foo<-`) >> `bar<-` <- compiler::cmpfun(`bar<-`) >> >> x <- c(2, 2) >> foo(x) <- 1 >> x # should be c(4, 4) >> #> [1] 3 3 >> >> If the functions are not compiled or the stopifnot call is removed, >> the snippet works correctly. So it seems that something is messing >> around with the references to "value" when the call to stopifnot gets >> compiled, and the wrong "value" is modified. Note also that if "x <- >> 2", then the result is correct, 4. >> >> Regards, >> > ______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Thanks for the reports. Will look into it soon and report back. Luke Sent from my iPhone> On Jan 3, 2019, at 2:15 PM, Martin Morgan <mtmorgan.bioc at gmail.com> wrote: > > For what it's worth this also introduced > >> df = data.frame(v = package_version("1.2")) >> rbind(df, df)$v > [[1]] > [1] 1 2 > > [[2]] > [1] 1 2 > > instead of > >> rbind(df, df)$v > [1] '1.2' '1.2' > > which shows up in Travis builds of Bioconductor packages > > https://stat.ethz.ch/pipermail/bioc-devel/2019-January/014506.html > > and elsewhere > > Martin Morgan > > ?On 1/3/19, 7:05 PM, "R-devel on behalf of Duncan Murdoch" <r-devel-bounces at r-project.org on behalf of murdoch.duncan at gmail.com> wrote: > >> On 03/01/2019 3:37 p.m., Duncan Murdoch wrote: >> I see this too; by bisection, it seems to have first appeared in r72943. > > Sorry, that was a typo. I meant r75943. > > Duncan Murdoch > >> >> Duncan Murdoch >> >>> On 03/01/2019 2:18 p.m., I?aki Ucar wrote: >>> Hi, >>> >>> I found the following issue in r-devel (2019-01-02 r75945): >>> >>> `foo<-` <- function(x, value) { >>> bar(x) <- value * x >>> x >>> } >>> >>> `bar<-` <- function(x, value) { >>> stopifnot(all(value / x == 1)) >>> x + value >>> } >>> >>> `foo<-` <- compiler::cmpfun(`foo<-`) >>> `bar<-` <- compiler::cmpfun(`bar<-`) >>> >>> x <- c(2, 2) >>> foo(x) <- 1 >>> x # should be c(4, 4) >>> #> [1] 3 3 >>> >>> If the functions are not compiled or the stopifnot call is removed, >>> the snippet works correctly. So it seems that something is messing >>> around with the references to "value" when the call to stopifnot gets >>> compiled, and the wrong "value" is modified. Note also that if "x <- >>> 2", then the result is correct, 4. >>> >>> Regards, >>> >> > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel