>>>>> Martin Maechler <maech...@stat.math.ethz.ch>
>>>>>     on Wed, 23 Aug 2017 09:10:20 +0200 writes:

>>>>> Peter Bosa <peter.b...@oregonmetro.gov>
>>>>>     on Tue, 22 Aug 2017 14:39:50 +0000 writes:

    >> Hello, I've noticed the following error using repeat{} / break in R 
3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
    >> When running a repeat function, the break command causes an error 
message if the repeat command refers to code within a file, but does not 
produce an error if the code is contained within the repeat{} command.

    >> Hello, I've noticed the following error using repeat{} / break in R 
3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
    >> 
    >> When running a repeat function, the break command causes an error 
message if the repeat command refers to code within a file, but does not 
produce an error if the code is contained within the repeat{} command.
    >> 
    >> For example, the following code runs fine:
    >> 
    >> x <- 1
    >> y <- 5
    >> 
    >> repeat {
    >> if(x < y) {
    >> print("No Break Dance :-(")
    >> x = x + 1
    >> } else {
    >> print("Break Dance!")
    >> break
    >> }
    >> }
    >> 
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "Break Dance!"
    >> >
    >> 
    >> However, if I take the loop contents of the repeat{} function, and save 
them to a file (breakTest.R) that contains the following:
    >> 
    >> if(x < y) {
    >> print("No Break Dance :-(")
    >> x = x + 1
    >> } else {
    >> print("Break Dance!")
    >> break
    >> }
    >> 
    >> And then run the following code:
    >> 
    >> x <- 1
    >> y <- 5
    >> 
    >> repeat{
    >> source("./breakTest.R")
    >> }
    >> 
    >> I get the following error:
    >> 
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "Break Dance!"
    >> Error in eval(ei, envir) : no loop for break/next, jumping to top level
    >> >
    >> 
    >> This was not an issue with previous versions of R that I have used, 
including 3.3.3.
    >> 
    >> Any suggestions? Is this a known bug with 3.4.1?

    > Thank you, Peter!

    > I can confirm what you are seeing (on Linux) in R version 3.4.0,
    > 3.4.1, and "R devel", and also that this had worked w/o a
    > problem in earlier versions of R, where I've looked at
    > R version 3.3.3 and 3.2.5.

    > I do think this is a bug, but it was not known till now.

    > For ease of use, I attach the two R files to easily reproduce.
    > Note I use  writeLines() instead of print() as its output is "nicer".

    > Best regards,
    > Martin Maechler, ETH Zurich

Trying again with the two attachment.  Yes, I of all people (!!)
should know that they must have an allowed MIME type; in this
case  text/plain !

Martin

## see ./break-source_R341.R
if(x < y) {
  writeLines("No Break Dance :-(")
  x <- x + 1
} else {
  writeLines("Break Dance!")
  break
}
## From: Peter Bosa <peter.b...@oregonmetro.gov>
## To: "R-devel@r-project.org" <R-devel@r-project.org>
## Subject: [Rd] Possible repeat{} / break function bug in R 3.4.1
## Date: Tue, 22 Aug 2017 14:39:50 +0000

## Hello, I've noticed the following error using repeat{} / break in R 3.4.1 
running on Windows 10 and Windows Server 2008 (both 64-bit environments).

## When running a repeat function, the break command causes an error message if 
the repeat command refers to code within a file, but does not produce an error 
if the code is contained within the repeat{} command.

## For example, the following code runs fine:

x <- 1
y <- 5
repeat {
  if(x < y) {
    writeLines("No Break Dance :-(")
    x <- x + 1
  } else {
    writeLines("Break Dance!")
    break
  }
}
## No Break Dance :(
## No Break Dance :(
## No Break Dance :(
## No Break Dance :(
## No Break Dance :(
## Break Dance!
## >

## However, if I take the loop contents of the repeat{} function, and save
## them to a file (breakTest.R) that contains the following:
##                 ^^^^^^^^^^^
##                __SEE THAT FILE__
## if(x < y) {
##   writeLines("No Break Dance :-(")
##   x = x + 1
## } else {
##   writeLines("Break Dance!")
##   break
## }

## And then run the following code:

x <- 1
y <- 5
repeat{
  source("./breakTest.R")
}
cat("successfully finished\n")

## I get the following error:

## No Break Dance :(
## No Break Dance :(
## No Break Dance :(
## No Break Dance :(
## No Break Dance :(
## Break Dance!
## Error in eval(ei, envir) : no loop for break/next, jumping to top level
## ^^^^^^^^^^^^^^^^^^^^


## This was not an issue with previous versions of R that I have used, 
including 3.3.3.

## MM: It does work in R 3.3.3, indeed
## --  it fails in R 3.4.0 and later


## Any suggestions? Is this a known bug with 3.4.1?

## Cheers-
## Peter


## ----------------------------------------------------------------
## peter bosa
## metro
## modeling services
## 600 ne grand ave
## portland, or  97232

## peter.b...@oregonmetro.gov<mailto:peter.b...@oregonmetro.gov>
## 503.797.1771

## metro | making a great place
## www.oregonmetro.gov
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to