[R] changing column labels for data frames inside a list

Vikram Chhatre crypticlineage at gmail.com
Mon Mar 30 17:19:03 CEST 2015


First of all, thank you for all the quick replies.  Here is a solution that
worked for me.

mylist2 <- lapply(mylist, function(e){colnames(e) <- paste0('pop',1:12);
return(e)})

> head(mylist2[[1]])
        pop1  pop2  pop3  pop4  pop5  pop6  pop7  pop8  pop9 pop10 pop11
pop12
L0001.1 0.60 0.500 0.325 0.675 0.600 0.500 0.500 0.375 0.550 0.475 0.350
0.275
L0001.2 0.40 0.500 0.675 0.325 0.400 0.500 0.500 0.625 0.450 0.525 0.650
0.725

While we are at this, I wanted to create a 13th column in each data frame
for average of each row.

# Calculate average
myavg <- lapply(mylist2, function(e) rowSums(mylist2)/12)

# Attach to the main data frame
mylist3 <- cbind(mylist2, myavg)

This does not work the way I imagined it would.  The myavg vector is
attached directly to mylist2, not to individual dataframes within.

p.s. Is it a standard convention to always copy the reply to the last
person who responded?

On Mon, Mar 30, 2015 at 10:56 AM, Sven E. Templer <sven.templer at gmail.com>
wrote:

> On 30 March 2015 at 16:47, Sarah Goslee <sarah.goslee at gmail.com> wrote:
>
> > colnames(e) <- paste0('pop',1:12)
> >
> > isn't a function and doesn't return anything.
> >
>
> But
> function(e){colnames(e) <- paste0('pop', 1:2)}
> is a function and it returns something (the last evaluated expression! -
> here the paste0 return):
>
> > mylist2 <- lapply(mylist, function(e){colnames(e) <- paste0('pop', 1:2)})
> > mylist2
> [[1]]
> [1] "pop1" "pop2"
>
> [[2]]
> [1] "pop1" "pop2"
>
> [[3]]
> [1] "pop1" "pop2"
>
>  from ?return:
>
> If the end of a function is reached without calling return, the value of
> the last evaluated expression is returned.
>
> >
> > > mylist <- list(
> > + data.frame(a = runif(10), b = runif(10)),
> > + data.frame(c = runif(10), d = runif(10)),
> > + data.frame(e = runif(10), f = runif(10)))
> > > mylist2 <- lapply(mylist, function(e){colnames(e) <- paste0('pop',
> 1:2);
> > e})
> > > colnames(mylist2[[1]])
> > [1] "pop1" "pop2"
> >
> > Sarah
> >
> > On Mon, Mar 30, 2015 at 9:54 AM, Vikram Chhatre
> > <crypticlineage at gmail.com> wrote:
> > >> summary(mygenfreqt)
> > >                   Length Class  Mode
> > > dat1.str 59220  -none- numeric
> > > dat2.str 59220  -none- numeric
> > > dat3.str 59220  -none- numeric
> > >
> > >> head(mylist[[1]])
> > >            1     2     3     4     5     6     7     8     9    10
> 11
> > >  12
> > > L0001.1 0.60 0.500 0.325 0.675 0.600 0.500 0.500 0.375 0.550 0.475
> 0.350
> > > 0.275
> > > L0001.2 0.40 0.500 0.675 0.325 0.400 0.500 0.500 0.625 0.450 0.525
> 0.650
> > > 0.725
> > >
> > > I want to change 1:12 to pop1:pop12
> > >
> > > mylist<- lapply(mylist, function(e) colnames(e) <- paste0('pop',1:12))
> > >
> > > What this is doing is replacing the data frames with just names
> > > pop1:pop12.  I just want to replace the column labels.
> > >
> > > Thanks for any suggestions.
> > >
> >
> > --
> > Sarah Goslee
> > http://www.functionaldiversity.org
> >
> > ______________________________________________
> > 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.
> >
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list