[R] Return value from function with For loop

David Winsemius dwinsemius at comcast.net
Mon Apr 17 05:12:41 CEST 2017


> On Apr 16, 2017, at 7:26 PM, Ramnik Bansal <ramnik.bansal at gmail.com> wrote:
> 
> In the code below
> 
> 
> *ff <- function(n){ for(i in 1:n) (i+1)}*
> 
> *n<-3;ff(n)->op;print(op)*
> 
> Why doesnt *print(op) * print 4 and instead prints NULL.
> Isnt the last line of code executed is *i+1 * and therefore that should be
> returned instead of NULL
> 
> instead if I say
> *ff <- function(n){ (n+1) }*
> 
> Then
> *n<-3;ff(n)->op;rm(n);print(op)*
> gives 4 as output.
> 
> My question is *Which *is considered as the last line in a functoin for the
> purpsoe of default return ? And under what conditions ?

It's probably a good thing that you are confused. It suggests that you are actually "getting" the R-paradigm. Unfortunately for the new user of R, there are several levels of understanding to pass through. First, you realize that function-results need to be assigned to names in order to persist. Then there is the next level where you discover that there are exceptions to that rule: this levels is the level where you realize that the `for` function is different from most other R functions.  It is really a side-effect-fucntion. The assignments made within its body actually persist in the global environment. AND it returns NULL. It shares this anomalous behavior with `while` and `repeat`.n Almost all functions are invoked with a possibly empty argument list.  The next and break functions have implicit paired (empty) parentheses. 

(My personal opinion is that this is not adequately advertised. Perhaps it is an attempt to get people to migrate away from "Fortran-coding" behavior?)

-- 
David.


> 
> -Thanks,
> Ramnik
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

David Winsemius
Alameda, CA, USA



More information about the R-help mailing list