Sven E. Templer
2015-Mar-30 14:56 UTC
[R] changing column labels for data frames inside a list
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]]
Vikram Chhatre
2015-Mar-30 15:19 UTC
[R] changing column labels for data frames inside a list
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]]
Bert Gunter
2015-Mar-30 15:31 UTC
[R] changing column labels for data frames inside a list
Sarah's statement is correct. So is yours. They are not contradictory, and I believe Sarah's point was that the OP needed to learn the appropriate syntax. -- Bert Bert Gunter Genentech Nonclinical Biostatistics (650) 467-7374 "Data is not information. Information is not knowledge. And knowledge is certainly not wisdom." Clifford Stoll On Mon, Mar 30, 2015 at 7: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.
Sven E. Templer
2015-Mar-30 15:39 UTC
[R] changing column labels for data frames inside a list
On 30 March 2015 at 17:19, Vikram Chhatre <crypticlineage at gmail.com> wrote:> 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. >For new problems you should use a new topic.> > # 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. > >But it works as expected (read ?cbind). You try to cbind two lists (myavg and mylist2). You want to cbind each list object (the data.frames) with each rowSums output. So, use cbind within your first lapply. p.s. Is it a standard convention to always copy the reply to the last> person who responded? >I guess it depends on which answer you refer to.> > 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]] > > ______________________________________________ > 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]]
Sven E. Templer
2015-Mar-30 15:43 UTC
[R] changing column labels for data frames inside a list
On 30 March 2015 at 17:31, Bert Gunter <gunter.berton at gene.com> wrote:> Sarah's statement is correct. > > So is yours. They are not contradictory, and I believe Sarah's point > was that the OP needed to learn the appropriate syntax. > >That's why I pointed to ?return. Sarah's statement was not so clear (and might have been misleading) for me regarding the R expertise of the OP.> -- Bert > > Bert Gunter > Genentech Nonclinical Biostatistics > (650) 467-7374 > > "Data is not information. Information is not knowledge. And knowledge > is certainly not wisdom." > Clifford Stoll > > > > > On Mon, Mar 30, 2015 at 7: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]]
Bert Gunter
2015-Mar-30 15:47 UTC
[R] Fwd: changing column labels for data frames inside a list
Sorry, I failed to cc the list. -- Bert ---------- Forwarded message ---------- From: Bert Gunter <bgunter at gene.com> Date: Mon, Mar 30, 2015 at 8:36 AM Subject: Re: [R] changing column labels for data frames inside a list To: Vikram Chhatre <crypticlineage at gmail.com> You really really need to spend (more?) time with a good R tutorial before posting further. Your questions are entirely due to your ignorance of standard language syntax that you should learn if you intend to use R. Of course, feel free to ask for help if there are places in the tutorials where, after an honest effort, you remain flummoxed. Cheers, Bert Bert Gunter Genentech Nonclinical Biostatistics (650) 467-7374 "Data is not information. Information is not knowledge. And knowledge is certainly not wisdom." Clifford Stoll On Mon, Mar 30, 2015 at 8:19 AM, Vikram Chhatre <crypticlineage at gmail.com> wrote:> 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]] > > ______________________________________________ > 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.
MacQueen, Don
2015-Mar-30 16:54 UTC
[R] changing column labels for data frames inside a list
Regarding the averages, someone else mentioned that it's preferred to start a new question in a new post to the list. That said, you are confusing "inside" the list with "outside" the list. Try this: (the following R expression is supposed to be all on one line, but my email software may cause a line break) myavgs <- lapply(mylist2, function(e) {cbind( e, avgs=rowSums(e)/12)} ) With no example data I can't test it. The brackets {} are not, strictly speaking, necessary, but I think they help clarify what is inside the function with what is outside it. -- Don MacQueen Lawrence Livermore National Laboratory 7000 East Ave., L-627 Livermore, CA 94550 925-423-1062 On 3/30/15, 8:19 AM, "Vikram Chhatre" <crypticlineage at gmail.com> wrote:>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]] > >______________________________________________ >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.