[Rd] return (x+1) * 1000

Ben Bolker bbo|ker @end|ng |rom gm@||@com
Sat Nov 21 01:48:40 CET 2020


  OK, you're way ahead of me.  If this is in the QA tools, I guess I
don't really see the need to change the parser and/or the language to
flag it immediately?

On Fri, Nov 20, 2020 at 7:43 PM Duncan Murdoch <murdoch.duncan using gmail.com> wrote:
>
> On 20/11/2020 7:01 p.m., Ben Bolker wrote:
> >    I may be unusual but I don't find these examples surprising at all/
> > I don't think I would make these mistakes (maybe it's easier to make
> > that mistake if you're used to a language where 'return' is a keyword
> > rather than a function?
> >
> >     My two cents would be that it would make more sense to (1) write
> > code to detect these constructions in existing R code (I'm not good at
> > this, but presumably "return() as anything other than the head of an
> > element of the body of a function" would work?)
>
> No, it's commonly nested within an if() expression, and could appear
> anywhere else.
>
>   (2) apply it to some
> > corpus of R code to see whether it actually happens much;
>
> I did that, in the bug report #17180 I cited.  In 2016 it appeared to be
> misused in about 100 packages.
>
> (3) if so,
> > add the test you wrote in step 1 to the QA tools in the utils
> > package/CRAN checks.
>
> That was done this year.
>
> Duncan Murdoch
>
> >
> > On Fri, Nov 20, 2020 at 6:58 PM Henrik Bengtsson
> > <henrik.bengtsson using gmail.com> wrote:
> >>
> >> Without having dug into the details, it could be that one could update
> >> the parser by making a 'return' a keyword and require it to be
> >> followed by a parenthesis that optionally contains an expression
> >> followed by end of statement (newline or semicolon).  Such a
> >> "promotion" of the 'return' statement seems backward compatible and
> >> would end up throwing syntax errors on:
> >>
> >> function() return
> >> function() return 2*x
> >> function() return (2*x) + 1
> >>
> >> while still accepting:
> >>
> >> function() return()
> >> function() return(2*x)
> >> function() return((2*x) + 1)
> >>
> >> Just my two Friday cents
> >>
> >> /Henrik
> >>
> >> On Fri, Nov 20, 2020 at 3:37 PM Dénes Tóth <toth.denes using kogentum.hu> wrote:
> >>>
> >>> Yes, the behaviour of return() is absolutely consistent. I am wondering
> >>> though how many experienced R developers would predict the correct
> >>> return value just by looking at those code snippets.
> >>>
> >>> On 11/21/20 12:33 AM, Gabriel Becker wrote:
> >>>> And the related:
> >>>>
> >>>>      > f = function() stop(return("lol"))
> >>>>
> >>>>      > f()
> >>>>
> >>>>      [1] "lol"
> >>>>
> >>>>
> >>>> I have a feeling all of this is just return() performing correctly
> >>>> though. If there are already R CMD CHECK checks for this kind of thing
> >>>> (I wasnt sure but I'm hearing from others there may be/are) that may be
> >>>> (and/or may need to be) sufficient.
> >>>>
> >>>> ~G
> >>>>
> >>>> On Fri, Nov 20, 2020 at 3:27 PM Dénes Tóth <toth.denes using kogentum.hu
> >>>> <mailto:toth.denes using kogentum.hu>> wrote:
> >>>>
> >>>>      Or even more illustratively:
> >>>>
> >>>>      uneval_after_return <- function(x) {
> >>>>          return(x) * stop("Not evaluated")
> >>>>      }
> >>>>      uneval_after_return(1)
> >>>>      # [1] 1
> >>>>
> >>>>      On 11/20/20 10:12 PM, Mateo Obregón wrote:
> >>>>       > Dear r-developers-
> >>>>       >
> >>>>       > After many years of using and coding in R and other languages, I
> >>>>      came across
> >>>>       > something that I think should be flagged by the parser:
> >>>>       >
> >>>>       > bug <- function (x) {
> >>>>       >       return (x + 1) * 1000
> >>>>       > }
> >>>>       >> bug(1)
> >>>>       > [1] 2
> >>>>       >
> >>>>       > The return() call is not like any other function call that
> >>>>      returns a value to
> >>>>       > the point where it was called from. I think this should
> >>>>      straightforwardly be
> >>>>       > handled in the parser by flagging it as a syntactic error.
> >>>>       >
> >>>>       > Thoughts?
> >>>>       >
> >>>>       > Mateo.
> >>>>       > --
> >>>>       > Mateo Obregón.
> >>>>       >
> >>>>       > ______________________________________________
> >>>>       > R-devel using r-project.org <mailto:R-devel using r-project.org> mailing list
> >>>>       > https://stat.ethz.ch/mailman/listinfo/r-devel
> >>>>       >
> >>>>
> >>>>      ______________________________________________
> >>>>      R-devel using r-project.org <mailto:R-devel using r-project.org> mailing list
> >>>>      https://stat.ethz.ch/mailman/listinfo/r-devel
> >>>>
> >>>
> >>> ______________________________________________
> >>> R-devel using r-project.org mailing list
> >>> https://stat.ethz.ch/mailman/listinfo/r-devel
> >>
> >> ______________________________________________
> >> R-devel using r-project.org mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-devel
> >
> > ______________________________________________
> > R-devel using r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
> >
>



More information about the R-devel mailing list