Very interesting topic. "What I want to know is *WHY* people are doing this?"

Here goes my view - I've used many for loops, and each time I realize 
how stupid that is... AFTER I learned how to avoid it. But it's 
difficult to avoid them without knowing how to do it. (Monsieur de 
LaPalice wouldn't have puted it better...)

For loops are conceptually very easy to understand. Lists are not 
easy to understand (why list[[1]] instead of list[1]? it's not 
completely intuitive) .

The concept of lapply is difficult: it involves a list, then most 
likely writing a function and pasting those two concepts togther. 
When I first came accross assign, I thought that was the coolest 
thing, to be able to output something for each loop.  I thought I was 
smart and R was smart. And yet, lapply makes it way better in almost 
all the cases.

I can make two very concrete suggestions:

a) In "An Introduction to R"
after:
"Warning: for() loops are used in R code much less often than in 
compiled languages. Code that takes a `whole object' view is likely 
to be both clearer and faster in R."

Give some examples how to avoid it. Mention subset, subscript, sub, 
gsub (to substitute for characters), lower.tri for lower triangle in 
matrixes and other nice tricks that people could use. Does this sound 
situations where I used for loops in some (not so far away) time ago? 
YES!

b) in the assign help file:
after the example:

for(i in 1:6) { #-- Create objects  'r1', 'r2', ... 'r6' --
  nam <- paste("r",i, sep=".")
  assign(nam, 1:i)
}
r.3
[1] 1 2 3

write a note: "the following would do the same more efficiently"

i=1:6
r=lapply(i, function(i) {1:i})

r[[3]]
[1] 1 2 3

Finally, I have the feeling that this type of problems are very 
common and I don't know how to categorize them.

In the same category I would involve: get("x") that solved a lot of 
problems for me, do.call("function") that solved a lot of problems as 
well. This category deals basically with object names, attributes, 
strings, and so on. For instance, I am sure there is a way to get the 
name of an object something that does: function(x)="x". And I haven't 
found it yet.

Many people are coming to R that don't really have computer science 
background. In that sense, you amazing people that know so much about 
this and that I read everyday in awe , are a victim of your own 
success. You have produced an amazing software for FREE!, easy to get 
access to, with a mailing list, packages that are becoming standard 
in (at least...) biology. And yet, this sofware is necessarily very 
technical and with a lot of fine points and details. A very nice 
conundrum. I am afraid we will keep asking a lot of questions. And 
hopefully you won't get bored and stop answering them.

Tobias Muhlhofer <[EMAIL PROTECTED]> wrote:
        I am trying to define a large number of variables through a loop
        construct.

He wants to do
        for (i in 1:100) {
            assign(paste("v", i, sep=""), ....something or other...)
        }

This is, of course, a FAQ.  It's such a FAQ that I must have seen it
once a day for the last several days.

What I want to know is *WHY* people are doing this?
What, precisely, does it buy you to have variables called v1...v100
rather than variables called v[[1]]...v[[100]]?
Apart from persistent inconvenience, that is?

What, really, is wrong with

     v <- lapply(1:100, function (i) ....something or other...)
        [[alternative HTML version deleted]]

______________________________________________
[EMAIL PROTECTED] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to