[R] Return value from function with For loop

Bert Gunter bgunter.4567 at gmail.com
Mon Apr 17 06:50:36 CEST 2017


David et. al.:

"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. "

for(), while(), if(), next, etc. are *not* functions.

?for says: "These are the basic control-flow constructs of the R language."

They do not "return" values. They control program flow, whence what
you call "side effects" are actually expressions that are parsed and
evaluated

viz.

> if(TRUE)10
[1] 10

## but

>if(FALSE) 5
## nothing is returned, not even NULL
> for(i in 1:3) i
## Ditto

>  z <- NULL
> z <- for(i in 1:3)i
> z
NULL ## still

Cheers,
Bert




Cheers,
Bert




Bert Gunter

"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Sun, Apr 16, 2017 at 8:12 PM, David Winsemius <dwinsemius at comcast.net> wrote:
>
>> 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
>
> ______________________________________________
> 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.



More information about the R-help mailing list