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.vettora...@uke.uni-hamburg.de >> To: ritacarre...@hotmail.com >> CC: r-help@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@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 ______________________________________________ R-help@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.