[R] Converting a string to variable names

MacQueen, Don macqueen1 at llnl.gov
Fri Nov 17 19:44:27 CET 2017


Do you mean that you have
    One data frame, and it has a bunch of variables within it named P1, P2, P3...
or
    A bunch of data frames names P1, P2, P3...
?

I'll assume it's the latter. Here is one way:

dfnms < c('P1', 'P2', 'P3')

for (nm in dfnms) {
  tmp <- get(nm)
  rownames(tmp) <- tmp[[1]]
  assign(nm, tmp)
}

The get() and assign() functions have position and/or environment arguments. You might have to supply those.

You wouldn't have to use get() and assign() if the data frames were stored as elements of a list. This is sometimes a good way to do things.

mydfs <- list(P1=P1, P2=P2, P3=P3)
for (idf in seq(mydfs)) rownames(mydfs[[idf]]) <- mydfs[[idf]][[1]]

Of course, then you can't do, for example,
  plot( P1$x, P1$y)
you would have to do
  plot(mydf$P1$x, mydf$P1$y)

or instead of
   with(P1, plot(x,y))
you would have to do
   with(mydf$P1, plot(x,y))

(all of the above is untested, so watch out for typing errors)

-Don

--
Don MacQueen
Lawrence Livermore National Laboratory
7000 East Ave., L-627
Livermore, CA 94550
925-423-1062
Lab cell 925-724-7509
 
 

On 11/15/17, 2:22 PM, "R-help on behalf of 刘瑞阳" <r-help-bounces at r-project.org on behalf of ruiyangliu94 at gmail.com> wrote:

    Hi,
    
    Thanks for your reply.
    
    I just came up with another question about a similar but different thing:
    
    Say I have a bunch of data.frame variables named P1,P2,P3… I want to assign them row names according to symbols in the first column, and I want to do this using a for loop. How could I accomplish this?
    
    
    for (test_sample in c(1:10)){
    + x<-as.name(paste(“P",as.character(test_sampel),sep=""))
    + rownames(x)<-get((paste(“P”,as.character(test_sample),sep="")))[,1]
    + }
    
    This would not work probably because x is simply a name instead of a data.frame variable(Error: "attempt to set 'rownames' on an object with no dimensions"). But I could not find the right way out… How should I solve it?
    
    Thanks!
    
    Ruiyang
    
    
    > On Nov 14, 2017, at 4:39 PM, Jim Lemon <drjimlemon at gmail.com> wrote:
    > 
    > Hi Ruiyang,
    > I think you want "get":
    > 
    > For (index in seq(1,16)){
    > plot(x=(a given set of value),y=get(paste(“PC”,as.character(index),sep=“”)))
    > }
    > 
    > On Wed, Nov 15, 2017 at 7:43 AM, 刘瑞阳 <ruiyangliu94 at gmail.com> wrote:
    >> Hi,
    >> Suppose that I want to do a series of plots with the y value for each plot as PC1, PC2, PC3… How could I accomplish this using a for loop?
    >> Suppose the code like this:
    >> 
    >> For (index in seq(1,16)){
    >> plot(x=(a given set of value),y=paste(“PC”,as.character(index),sep=“”)
    >> }
    >> 
    >> But this would not work because y is assigned a string instead of the variable names. So how could I assign y with a variable name instead of a string? Your reply would be appreciated!
    >> Ruiyang Liu
    >> ______________________________________________
    >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
    >> 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.
    
    ______________________________________________
    R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
    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.



More information about the R-help mailing list