[R] Loop

David Winsemius dwinsemius at comcast.net
Wed Nov 3 22:41:09 CET 2010


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



More information about the R-help mailing list