[R] Loop in variable names

Eik Vettorazzi E.Vettorazzi at uke.uni-hamburg.de
Fri Feb 11 16:59:56 CET 2011


Hi Stella,
if you just want to print the tables, this should also work
for(i in angus) {
   tab <- paste("table", i, sep="")
   cut <- paste("P",i, sep = "")
   print(table(StoreData$CompanyID, !is.na(StoreData[,cut])))
   }

If you want to keep them, your approach works, but you can also store
them in a list
tabs<-list()
for(i in angus) {
   tab <- paste("table", i, sep="")
   cut <- paste("P",i, sep = "")
   tabs[[i]]<-table(StoreData$CompanyID, !is.na(StoreData[,cut]))
   }
this produces a list of 5 elements, where only  2 and 5 are populated.

Changing the last line to
tabs[[which(angus==i)]]<-table(StoreData$CompanyID, !is.na(StoreData[,cut]))
produces a list of 2 elements, but the information on "angus" is lost.

best regards

Am 11.02.2011 15:41, schrieb Rita Carreira:
> Thanks so much, that worked well; however, it did not print the tables.
> I went around it and did the following, which worked:
> 
> for(i in angus) {
>   tab <- paste("table", i, sep="")
>   cut <- paste("P",i, sep = "")
>   t <- table(StoreData$CompanyID, !is.na(StoreData[,cut]))
> assign(tab,t)
>   }
> 
> table2
> table5
> 
> Is this the only way? Could I not have put table2 and table5 with an i
> index inside the loop?
> 
> Sorry to bother you. 
> Stella
> 
> 
>> Date: Wed, 9 Feb 2011 20:15:23 +0100
>> From: E.Vettorazzi at uke.uni-hamburg.de
>> To: ritacarreira at hotmail.com
>> CC: r-help at r-project.org
>> Subject: Re: [R] Loop in variable names
>>
>> Hi Stella,
>> in your coding 'cut' is a string, not a data object.
>>
>> something like
>> cut <- paste("P",i, sep="")
>> table(StoreData$CompanyID, !is.na(StoreData[,cut]))
>>
>> should work.
>>
>> hth.
>>
>> Am 09.02.2011 19:02, schrieb Rita Carreira:
>> >
>> >
>> > Hello!
>> > I would like to do some tables for several variables and I would
> like to write a loop that does the table for each variable. I should
> also point out that my data set has several missing observations and
> sometimes the observations that are missing are not the same for all my
> variables.
>> >
>> > What I would like to do:
>> >
>> > table(StoreData$CompanyID,
>> > !is.na(StoreData$P2))
>> > table(StoreData$CompanyID,
>> > !is.na(StoreData$P5))
>> >
>> > If I run the above code, I get:
>> >
>> >> table(StoreData$CompanyID,
>> > + !is.na(StoreData$P2))
>> >
>> > FALSE TRUE
>> > 2 940 0
>> > 3 0 323
>> > 4 288 0
>> > 5 306 0
>> >
>> >> table(StoreData$CompanyID,
>> > + !is.na(StoreData$P5))
>> >
>> > FALSE TRUE
>> > 2 940 0
>> > 3 0 323
>> > 4 288 0
>> > 5 306 0
>> >
>> >
>> > Here's the loop that I wrote, which does not work:
>> >
>> > angus <- c(2,5)
>> >
>> > for(i in angus) {
>> > cut <- paste("StoreData$P",i, sep="")
>> > table(StoreData$CompanyID, !is.na(cut))
>> > }
>> >
>> > When I run the above, I get the following error message:
>> >
>> > Error in table(StoreData$CompanyID, !is.na(cut)) :
>> > all arguments must have the same length
>> >> source(.trPaths[5], echo=TRUE, max.deparse.length=150)
>> >
>> > Any help is greatly appreciated!
>> > Stella
>> >
>> >
>> >
>> >
>> > [[alternative HTML version deleted]]
>> >
>> > ______________________________________________
>> > 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.
>>
>>
>> --
>> Eik Vettorazzi
>> Institut für Medizinische Biometrie und Epidemiologie
>> Universitätsklinikum Hamburg-Eppendorf
>>
>> Martinistr. 52
>> 20246 Hamburg
>>
>> T ++49/40/7410-58243
>> F ++49/40/7410-57790


-- 
Eik Vettorazzi
Institut für Medizinische Biometrie und Epidemiologie
Universitätsklinikum Hamburg-Eppendorf

Martinistr. 52
20246 Hamburg

T ++49/40/7410-58243
F ++49/40/7410-57790



More information about the R-help mailing list