[R] Return value from function with For loop

Bert Gunter bgunter.4567 at gmail.com
Mon Apr 17 16:13:19 CEST 2017


OK. I stand corrected. Thanks.

-- 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 11:36 PM, David Winsemius
<dwinsemius at comcast.net> wrote:
> Both 'for' and 'next' return TRUE from is.function
>
> is.function('for')
> is.function('next')
>
> Not at an R console at the moment but I did check this earlier today. Thinking of it as different is definitely the way to think about it. (ISTR Bert and I have had this exchange in the past.)
>
> --
> Best
> David
>
> Sent from my iPhone
>
>> On Apr 16, 2017, at 9:50 PM, Bert Gunter <bgunter.4567 at gmail.com> wrote:
>>
>> 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