[R] seq_len and loops

Göran Broström goran.brostrom at umu.se
Wed Jan 1 01:09:50 CET 2014


Thanks for the answers from Duncan, Bill, Gabor, and Henrik. You 
convinced me that

1. The solution

if (x > 1){
    for (x in 2:x){
       ...

is the easiest, most effective,  and most easy-to-understand.

2. However, Bill (and Henrik)  raised the question of replacing '1' with 
'1L'; I understand the meaning of that, but does it matter (in practice)?

3. Noone commented upon

i <- 1
while (i < x){
    i <- i + 1
    ...
}

I suppose that it means that it is the best solution.

Thanks, and Happy New Year 2014!

Göran

On 12/22/2013 06:57 PM, William Dunlap wrote:
>>> for (i in seq_len(x - 1) + 1)
>>>
>>> should be efficient and safe.
>>
>> Oops, not safe when x is 0.
>
> Also, the '+ 1' should be '+ 1L' to get the same answer as
> seq_len(x)[-1].
>
> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com
>
>
>> -----Original Message-----
>> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
>> Of Duncan Murdoch
>> Sent: Saturday, December 21, 2013 3:52 PM
>> To: Göran Broström; R-help at r-project.org
>> Subject: Re: [R] seq_len and loops
>>
>> On 13-12-21 6:50 PM, Duncan Murdoch wrote:
>>> On 13-12-21 5:57 PM, Göran Broström wrote:
>>>> I was recently reminded on this list that
>>>>
>>>> "Using 1:ncol() is bad practice (seq_len is designed for that purpose)"
>>>> (Ripley)
>>>>
>>>> This triggers the following question: What is "good practice" for
>>>> 2:ncol(x)? (This is not a joke; in a recursive situation it often makes
>>>> sense to perform the calculation for the start value i = 1, then
>>>> continue with a loop over the rest, "the Fortran way";)
>>>>
>>>> I usually use
>>>>
>>>> if (ncol(x) > 1)
>>>>         for (i in 2:ncol(x)){
>>>>            ....
>>>>
>>>> but I can think of
>>>>
>>>> for (i in seq_len(x - 1)){
>>>>         I <- i + 1
>>>>        ....
>>>>
>>>> and
>>>>
>>>> i <- 1
>>>> while (i < ncol(x)){
>>>>         i <- i + 1
>>>>         ....
>>>>
>>>> What is "good practice" (efficient and safe)?
>>>
>>> for (i in seq_len(x - 1) + 1)
>>>
>>> should be efficient and safe.
>>
>> Oops, not safe when x is 0.
>>
>>   >
>> A little less efficient, but clearer would be
>>>
>>> for (i in seq_len(x)[-1])
>>>
>>> Duncan Murdoch
>>>
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> 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