[R] Loop

Petr PIKAL petr.pikal at precheza.cz
Thu Nov 4 15:40:25 CET 2010


Hi

r-help-bounces at r-project.org napsal dne 04.11.2010 14:21:38:

> Hi David, 
> 
> I am still having troubles with that loop ...
> 
> This code gives me (kinda) the name of the column/field in a data frame. 
Filed
> names are form W1-W10. But there is a space between W and a number --> 
"W 10",
> and column (field) names do not contain numbers. 
> 
> >for(i in 1:10) 
> >{
> >vari <- paste("W",i)
> >}
> >vari
> 
> [1] "W 10"
> 
> Now as i understand than i would call different columns to R with 
> 
> >w<-lit[[vari]]
> 
> Or am i wrong again?
> 
> Then I would probably need another loop to create the names of the 
variables 
> on R, i.e. w1 to w10. Is that a general idea for the procedure?

Beware of such loops. Instead of littering your workspace with 
files/objects constructed by some paste(whatever, i) solution you can save 
results in list or data.frame or matrix and simply use basic subsetting 
procedures or lapply/sapply functions.

I must say I never used such paste(...) construction yet and I work with R 
for quite a long time.

Regards
Petr


> 
> 
> Thank for the help, m
> 
> -----Original Message-----
> From: David Winsemius [mailto:dwinsemius at comcast.net] 
> Sent: Wednesday, November 03, 2010 10:41 PM
> To: Matevž Pavlič
> Cc: r-help at r-project.org
> Subject: Re: [R] Loop
> 
> 
> On Nov 3, 2010, at 5:03 PM, Matevž Pavlič wrote:
> 
> > Hi,
> >
> > Thanks for the help and the manuals. Will come very handy i am sure.
> >
> > But regarding the code i don't hink this is what i want....basically i 

> > would like to repeat bellow code :
> >
> > w1<-table(lit$W1)
> > w1<-as.data.frame(w1)
> 
> It appears you are not reading for meaning. Burns has advised you how to 

> construct column names and use them in your initial steps. The `$` 
function is
> quite limited in comparison to `[[` , so he was showing you a method 
that 
> would be more effective.  BTW the as.data.frame step is unnecessary, 
since the
> first thing write.table does is coerce an object to a data.frame. The 
> "write.table" name is misleading. It should be "write.data.frame". You 
cannot 
> really write tables with write.table.
> 
> You would also use:
> 
>   file=paste(vari, "csv", sep=".") as the file argument to write.table
> 
> > write.table(w1,file="w1.csv",sep=";",row.names=T, dec=".")
> 
> What are these next actions supposed to do after the file is written? 
> Are you trying to store a group of related "w" objects that will later 
be 
> indexed in sequence? If so, then a list would make more sense.
> 
> --
> David.
> 
> > w1<- w1[order(w1$Freq, decreasing=TRUE),] w1<-head(w1, 20)
> >
> > 20 times, where W1-20 (capital letters) are the fields in a data.frame 

> > called "lit" and w1-20 are the data.frames being created.
> >
> > Hope that explains it better,
> 
> > m
> >
> > -----Original Message-----
> > From: Patrick Burns [mailto:pburns at pburns.seanet.com]
> > Subject: Re: [R] Loop
> >
> > If I understand properly, you'll want
> > something like:
> >
> > lit[["w2"]]
> >
> > instead of
> >
> > lit$w2
> >
> > more accurately:
> >
> > for(i in 1:20) {
> > vari <- paste("w", i)
> > lit[[vari]]
> >
> > ...
> > }
> >
> > The two documents mentioned in my
> > signature may help you.
> >
> > On 03/11/2010 20:23, Matevž Pavlič wrote:
> >> Hi all,
> >>
> >> I managed to do what i want (with the great help of thi mailing
> >> list)  manually . Now i would like to automate it. I would probably 
> >> need a for loop for to help me with this...but of course  I have no 
> >> idea how to do that in R.  Bellow is the code that i would like to be 

> >> replicated for a number of times (let say 20). I would like to 
> >> achieve  that w1 would change to w2, w3, w4 ... up to w20 and by that 

> >> create 20 data.frames that I would than bind together with cbind.
> >>
> >> (i did it like shown bellow -manually)
> >>
> >> w1<-table(lit$W1)
> >> w1<-as.data.frame(w1)
> >> write.table(w1,file="w1.csv",sep=";",row.names=T, dec=".")
> >> w1<- w1[order(w1$Freq, decreasing=TRUE),] w1<-head(w1, 20)
> >>
> >> w2<-table(lit$W2)
> >>
> >> w2<-as.data.frame(w2)
> >>
> >> write.table(w2,file="w2.csv",sep=";",row.names=T, dec=".")
> >>
> >> w2<- w2[order(w2$Freq, decreasing=TRUE),]
> >>
> >> w2<-head(w2, 20)
> >> .
> >> .
> >> .
> >>
> >> Thanks for the help,m
> 
> >
> 
> David Winsemius, MD
> West Hartford, CT
> 
> ______________________________________________
> 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