On Sun, Jan 10, 2010 at 7:16 AM, Berend Hasselman <b...@xs4all.nl> wrote: > > > > Zoho wrote: >> >> I've been stuck with this problem for a whole afternoon. It's silly but >> totally pissed me off. I have a set of data frames with names in a >> sequence: df_1, df_2, df_3, ..., df_20. Now I want to access each data >> frame (read or write) in a for loop, in a way something like this: >> >> for (i in 1:20) { >> df_i <- ###### >> length(which(df_i[,7]==1)) >> ###### >> } >> >> I tried paste or cat ("df_", i, sep=""). But neither way works. Your help >> is highly appreciated!! Thanks in advance! >> > > df_1 <- data.frame(x1=3,x2=5) > df_2 <- data.frame(x1=2,x2=7) > df_3 <- data.frame(x1=-1,x2=1) > > for(k in 1:3){v <- paste("df_",k,sep=""); print(get(v))} > for(k in 1:3){v <- paste("df",k,sep="_"); print(get(v)[,2])} > > Have a look at get: > > ?get
Or better still, have a look at making a *list* instead of a bunch of data frames with numbers in their names, then you can index in a sensible way without having to construct names with paste and get. Here's a list of data frames: L = list() for(i in 1 :10){ L[[i]]=data.frame(x=runif(10)) } Now you can loop over L[[i]] This has been asked a zillion times on R-help. Sure, if you've already mistakenly created 200 data frames then you need the paste/get solution, but don't make the same mistake twice. Use a list. Barry ______________________________________________ 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.