You might find it useful to look at what body() shows you for your
example and to think about what return does.

Best,

luke

On Fri, 21 Oct 2016, Wilm Schumacher wrote:

Hi,

thx for the reply. Unfortunately that is not a simplified version of the
problem. You have a function, call it and get the result (numeric in,
numeric out in that case). For simplicity lets use the "return" case:

##
foobar<-function(x) { return(sqrt(x)) }(2)
##
which is a function (numeric in, numeric out) which is defined, then
gets called and the return value is a function (with an appendix of
"(2)" which gets ignored), not the numeric.

In my opinion the result of the expression above should be a numeric
(1.41... in this case) or an parser error because of ambiguities.

e.g. in comparison with node.js

##
function(x){
    return(2*x)
}(2);
##

leads to

##
SyntaxError: Unexpected token (
##

Or Haskell (and basically every complete functional languange)
##
(\x -> 2*x) 2
##
which leads to 4 (... okay, that is not comparable because here the
parenthesis make a closure which also works in R or node.js).

However, I think it's weird that

> ( function(x) { return(2*x) } ( 2 ) ) (3)

is a legal statement which results to 6 and that the "(2)" is basically
ignored by the parser.

Furthermore it is very strange, that

##
f1<-function(x) { print(2*x) }(2)
f1(3)
##
does the command and gives an error ("attempt to apply non-function") and
##
f2<-function(x) { return(2*x) }(2)
f2(3)
##
is perfectly fine. Thus the return statement changes the interpretation
as a function? Or do I miss something?

Best wishes

Wilm

Am 21.10.2016 um 17:00 schrieb William Dunlap:
Here is a simplified version of your problem
 > { sqrt }(c(2,4,8))
  [1] 1.414214 2.000000 2.828427
Do you want that to act differently?


Bill Dunlap
TIBCO Software
wdunlap tibco.com <http://tibco.com>

On Fri, Oct 21, 2016 at 6:10 AM, Wilm Schumacher
<wilm.schumac...@gmail.com <mailto:wilm.schumac...@gmail.com>> wrote:

    Hi,

    I hope this is the correct list for my question. I found a wired
    behaviour of my R installation on the evaluation of anonymous
    functions.

    minimal working example

    ###
    f<-function(x) {
        print( 2*x )
    }(2)

    class(f)

    f(3)

    f<-function(x) {
        print( 2*x )
    }(4)(5)

    f(6)
    ###

    leads to

    ###
   > f<-function(x) {
    + print( 2*x )
    + }(2)
   >
   > class(f)
    [1] "function"
   >
   > f(3)
    [1] 6
    Error in f(3) : attempt to apply non-function
   >
   > f<-function(x) {
    + print( 2*x )
    + }(4)(5)
   >
   > f(6)
    [1] 12
    Error in f(6) : attempt to apply non-function

    ###

    is this a bug or desired behavior? Using parenthesis of coures
    solves the problem. However, I think the operator precedence could
    be the problem here. I looked at the "./src/main/gram.y" and I
    think that the line 385
        |    FUNCTION '(' formlist ')' cr expr_or_assign %prec LOW
    should be of way higher precedence. But I cannot forsee the side
    effects of that (which could be horrible in that case).

    If this is the desired behaviour and not a bug, I'm very
    interested in the rational behind that.

    Best wishes,

    Wilm

    ps:

    $ R --version
    R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"

    ______________________________________________
    R-devel@r-project.org <mailto:R-devel@r-project.org> mailing list
    https://stat.ethz.ch/mailman/listinfo/r-devel
    <https://stat.ethz.ch/mailman/listinfo/r-devel>




        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


--
Luke Tierney
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
   Actuarial Science
241 Schaeffer Hall                  email:   luke-tier...@uiowa.edu
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to