[R] crazy loop error.

Ivan Calandra ivan.calandra at uni-hamburg.de
Tue Jan 25 19:01:08 CET 2011


Now I understand what the difference between a primitive and a 
non-primitive!
Thanks for the clarification!
Ivan

Le 1/25/2011 18:03, Bert Gunter a écrit :
> Well, I'm not Prof. Ripley, but the answer is: Look at the code.
> seq_len, seq.int, and seq_along call Primitives, which are implemented
> in C, and therefore MUCH faster than seq(), which is implemented as
> pure R code (and is also a generic, so requires method dispatch).
> Though for small n (up to a few thousand, say), it probably doesn't
> make much difference.(Here, to be corrected by Prof. Ripley is
> needed).
>
> -- Bert
>
> On Tue, Jan 25, 2011 at 2:22 AM, Ivan Calandra
> <ivan.calandra at uni-hamburg.de>  wrote:
>> Mr Ripley,
>>
>> May I ask why seq_len() and seq_along() are better than seq()?
>>
>> Thanks,
>> Ivan
>>
>> Le 1/25/2011 09:58, Prof Brian Ripley a écrit :
>>> On Tue, 25 Jan 2011, Petr Savicky wrote:
>>>
>>>> On Mon, Jan 24, 2011 at 11:18:35PM +0100, Roy Mathew wrote:
>>>>> Thanks for the reply Erik, As you mentioned, grouping consecutive
>>>>> elements
>>>>> of 'a' was my idea.
>>>>> I am unaware of any R'ish way to do it. It would be nice if someone in
>>>>> the
>>>>> community knows this.
>>>>>
>>>>> The error resulting in the NA was pretty easy to fix, and my loop works,
>>>>> but
>>>>> the results are still wrong (new script below).
>>>>> Ideally it should print single "hello" for the single letters and
>>>>> grouped '3
>>>>> hellos' for the fives, grouped '2 hellos' for the sixes etc.
>>>>>
>>>>> Based on the run results, if the value of n is being tracked, it changes
>>>>> quite unpredictably.
>>>>> Can someone explain how the value of n changes from end of the loop to
>>>>> the
>>>>> top without anything being done to it?
>>>> Hi.
>>>>
>>>> A for-loop in R is different from a for-loop in C. It is similar
>>>> to foreach loop in Perl. If v is a vector, then
>>>>
>>>>   for (n in v)
>>>>
>>>> first creates the vector v and then always performs length(v) iterations.
>>>> Before iteration i, n is assigned v[i] even if n is changed in the
>>>> previous iteration.
>>> And also if v is changed during the loop.
>>>
>>>> If you want to control the loop variable during execution, it is possible
>>>> to use a while loop, where you have full control. While loop may be
>>>> better
>>>> also if v has a very large length, since, for example
>>>>
>>>>   for (n in 1:1000000)
>>>>
>>>> creates a vector of length 1000000 in memory.
>>>>
>>>> It should also be noted that the for-loop
>>>>
>>>>   for (n in 1:k)
>>>>
>>>> performs 2 iterations, if k is 0, since 1:0 is a vector of length 2.
>>>> If k may be 0, then it is better to use
>>>>
>>>>   for (n in seq(length=k))
>>>>
>>>> since seq(length=0) has length 0.
>>> Since you keep mentioning that, it is actually much better to use
>>> seq_len(k) (and seq_along(x) instead of your earlier recommendation of
>>> seq(along=x)).  And if you are using seq() in other cases in programs,
>>> consider seq.int() instead.
>>>
>>>> Hope this helps.
>>>>
>>>> Petr Savicky.
>> --
>> Ivan CALANDRA
>> PhD Student
>> University of Hamburg
>> Biozentrum Grindel und Zoologisches Museum
>> Abt. Säugetiere
>> Martin-Luther-King-Platz 3
>> D-20146 Hamburg, GERMANY
>> +49(0)40 42838 6231
>> ivan.calandra at uni-hamburg.de
>>
>> **********
>> http://www.for771.uni-bonn.de
>> http://webapp5.rrz.uni-hamburg.de/mammals/eng/1525_8_1.php
>>
>> ______________________________________________
>> 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.
>>
>
>

-- 
Ivan CALANDRA
PhD Student
University of Hamburg
Biozentrum Grindel und Zoologisches Museum
Abt. Säugetiere
Martin-Luther-King-Platz 3
D-20146 Hamburg, GERMANY
+49(0)40 42838 6231
ivan.calandra at uni-hamburg.de

**********
http://www.for771.uni-bonn.de
http://webapp5.rrz.uni-hamburg.de/mammals/eng/1525_8_1.php



More information about the R-help mailing list