[Rd] using with inside loop breaks next
Peter Dalgaard
pdalgd at gmail.com
Thu Oct 27 10:10:10 CEST 2016
(a)/(c) mostly, I think. The crux is that "next" is unhappy about being evaluated in a different environment than the containing loop. Witness this:
> for (i in 1:10) {if (i == 5) evalq(next); print(i)}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
> for (i in 1:10) {if (i == 5) evalq(next, new.env()); print(i)}
[1] 1
[1] 2
[1] 3
[1] 4
Error in eval(substitute(expr), envir, enclos) :
no loop for break/next, jumping to top level
> for (i in 1:10) {if (i == 5) evalq(next, parent.env(new.env())); print(i)}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
-pd
> On 27 Oct 2016, at 09:51 , Richard Cotton <richierocks at gmail.com> wrote:
>
> If I want to use with inside a loop, it seems that next gets confused.
> To reproduce:
>
> for(lst in list(list(a = 1), list(a = 2), list(a = 3)))
> {
> with(lst, if(a == 2) next else print(a))
> }
>
> I expect 1 and 3 to be printed, but I see
>
> [1] 1
> Error in eval(expr, envir, enclos) :
> no loop for break/next, jumping to top level
>
> Is this
> a) by design, or
> b) a bug, or
> c) a thing that is rare enough that I should just rewrite my code?
>
> --
> Regards,
> Richie
>
> Learning R
> 4dpiecharts.com
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list