On Nov 4, 2010, at 9:21 AM, Matevž Pavlič wrote:
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)
Should be:
vari <- paste("w", i, sep="")
}
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?
Maybe. Since you overwrote the first nine values there is only one
element in vari outside the loop. I would do the assignment inside the
loop and I suggested that the results be store in a list that is
indexed either by "vari" or by "i" (but without the quotes if you are
typing lit[[vari]]
--
David.
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?
Thank for the help, m
-----Original Message-----
From: David Winsemius [mailto:[email protected]]
Sent: Wednesday, November 03, 2010 10:41 PM
To: Matevž Pavlič
Cc: [email protected]
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:[email protected]]
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
David Winsemius, MD
West Hartford, CT
______________________________________________
[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
and provide commented, minimal, self-contained, reproducible code.