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.calan...@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.calan...@uni-hamburg.de

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

______________________________________________
R-help@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.calan...@uni-hamburg.de

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

______________________________________________
R-help@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.

Reply via email to