[R] data frame names in sequence. please help!!!

Barry Rowlingson b.rowlingson at lancaster.ac.uk
Sun Jan 10 12:00:49 CET 2010


On Sun, Jan 10, 2010 at 7:16 AM, Berend Hasselman <bhh at 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



More information about the R-help mailing list