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