Thanks, Arun! This pretty much does what I was looking for. Looks like I should get more familiar with the apply functions, it seems like they can solve a lot of these problems!
Best, Steve On Sun, Nov 25, 2012 at 8:09 PM, arun <smartpink...@yahoo.com> wrote: > HI Steve, > > You could try this: > ylist<-lapply(y,function(x) x) > res<-lapply(mapply(c,result,Thing=ylist,SIMPLIFY=FALSE),function(x) > do.call(cbind,x)) > res > #$`Error: subject` > # Df Sum Sq Mean Sq F value Pr(>F) Thing > #Residuals 4 12.4 3.1 NA NA 0.5 > > #$`Error: subject:myfactor` > # Df Sum Sq Mean Sq F value Pr(>F) Thing > #myfactor 2 14.93333 7.466667 13.57576 0.002682772 0.7724138 > #Residuals 8 4.40000 0.550000 NA NA 0.7724138 > > #But, it removes the "*", which BTW gets removed by individually inserting > as you showed. > > A.K. > > > > > > > > ________________________________ > From: Stephen Politzer-Ahles <politzerahl...@gmail.com> > To: arun <smartpink...@yahoo.com> > Cc: R help <r-help@r-project.org> > Sent: Sunday, November 25, 2012 8:35 PM > Subject: Re: [R] Adding a new variable to each element of a list > > > Hi Arun, > > Thanks a lot for the help. I think I didn't make my request clear, though; > sorry about that. What your example does is applies the values of y to each > element in the list "result". However, what I'm actually trying to do is > apply the nth element of y to the nth element of result. In other words, > I'm trying to find a way in one command to do the equivalent of the > following: > > result[[1]][[1]]$Thing <- y[1] > result[[2]][[1]]$Thing <- y[2] > ...etc. > > Is this even possible? (Granted, for my purpose "result" is not a very > long list, so it would not be difficult to just do those commands one at a > time or in a for loop. At this point I'm just curious to figure out a more > straightforward way to do it just for the sake of trying to learn more > about how R works!) > > If it helps put things into context, in my example the list "result" is a > summary of an aov object, and each element in the list is one of the ANOVA > effects; y is a vector of the partial eta squareds I calculated > corresponding to each effect, and I'm trying to figure out a way to add > those into the "result" object so it shows up when my colleague looks at > the summary. > > Best, > Steve > > > On Sat, Nov 24, 2012 at 5:22 PM, arun <smartpink...@yahoo.com> wrote: > > HI, > > > >The example data you gave have only one row for the 1st element of list. > So, it would be better to add it as: > > lapply(result,function(x) {x[[2]]<-y > > return(x)}) > >#$`Error: subject` > >#Component 1 : > > # Df Sum Sq Mean Sq F value Pr(>F) > >#Residuals 4 12.4 3.1 > ># > >#Component 2 : > >#[1] 0.5000000 0.7724138 > >----------------------------- > >You can also do: > > lapply(result,function(x) {x[[1]][6]<-y[1] > > x[[1]][7]<-y[2] > > return(x)}) > >#$`Error: subject` > > # Df Sum Sq Mean Sq F value Pr(>F) V6 V7 > >#Residuals 4 12.4 3.1 0.5 0.7724 > > > >#$`Error: subject:myfactor` > > # Df Sum Sq Mean Sq F value Pr(>F) V6 V7 > >#myfactor 2 14.93 7.467 13.58 0.002683 0.5 0.7724 > >#Residuals 8 4.40 0.550 0.5 0.7724 #Here it got > repeated > > > >May be there are better methods > > > >A.K. > > > > > > > > > > > > > >----- Original Message ----- > >From: Stephen Politzer-Ahles <politzerahl...@gmail.com> > >To: r-help@r-project.org > >Cc: > >Sent: Saturday, November 24, 2012 5:33 PM > >Subject: [R] Adding a new variable to each element of a list > > > >Hello, > > > >I have a list of data with multiple elements, and each element in the list > >has multiple variables in it. Here's an example: > > > >### Make the fake data > >dv <- c(1,3,4,2,2,3,2,5,6,3,4,4,3,5,6) > >subject <- factor(c("s1","s1","s1","s2","s2","s2","s3","s3","s3", > >"s4","s4","s4","s5","s5","s5")) > >myfactor <- factor(c("f1","f2","f3","f1","f2","f3","f1","f2","f3", > >"f1","f2","f3","f1","f2","f3")) > >mydata <- data.frame(dv, subject, myfactor) > > > >### Do the anova and store the summary in "result" > >mydata.aov <- aov( dv ~ myfactor + Error(subject/myfactor), mydata ) > >( result <- summary( mydata.aov ) ) # see the anova > > > >str(result) > > > >List of 2 > >$ Error: subject :List of 1 > > ..$ :Classes âanovaâ and 'data.frame': 1 obs. of 5 variables: > > .. ..$ Df : num 4 > > .. ..$ Sum Sq : num 12.4 > > .. ..$ Mean Sq: num 3.1 > > .. ..$ F value: num NA > > .. ..$ Pr(>F) : num NA > > ..- attr(*, "class")= chr [1:2] "summary.aov" "listof" > >$ Error: subject:myfactor:List of 1 > > ..$ :Classes âanovaâ and 'data.frame': 2 obs. of 5 variables: > > .. ..$ Df : num [1:2] 2 8 > > .. ..$ Sum Sq : num [1:2] 14.9 4.4 > > .. ..$ Mean Sq: num [1:2] 7.47 0.55 > > .. ..$ F value: num [1:2] 13.6 NA > > .. ..$ Pr(>F) : num [1:2] 0.00268 NA > > ..- attr(*, "class")= chr [1:2] "summary.aov" "listof" > > > >As you can see, each element in "result" has several variables (Df, Sum > Sq, > >Mean Sq, F value, Pr(>F)): > >str( result[[2]][[1]] ) > >Classes âanovaâ and 'data.frame': 2 obs. of 5 variables: > >$ Df : num 2 8 > >$ Sum Sq : num 14.9 4.4 > >$ Mean Sq: num 7.47 0.55 > >$ F value: num 13.6 NA > >$ Pr(>F) : num 0.00268 NA > > > >Now I also have another vector of numbers that I would like to add to the > >list, as a 6th variable for each element: > >y <- c(.5, .7724138) > > > >Ideally, I would like each element in the list ("Error: subject" and > >"Error: subject:myfactor") to have a 6th variable, so the new str() would > >look like: > >List of 2 > >$ Error: subject :List of 1 > > ..$ :Classes âanovaâ and 'data.frame': 1 obs. of 5 variables: > > .. ..$ Df : num 4 > > .. ..$ Sum Sq : num 12.4 > > .. ..$ Mean Sq: num 3.1 > > .. ..$ F value: num NA > > .. ..$ Pr(>F) : num NA > >* .. ..$ Thing : num 0.50* > > > > ..- attr(*, "class")= chr [1:2] "summary.aov" "listof" > >$ Error: subject:myfactor:List of 1 > > ..$ :Classes âanovaâ and 'data.frame': 2 obs. of 5 variables: > > .. ..$ Df : num [1:2] 2 8 > > .. ..$ Sum Sq : num [1:2] 14.9 4.4 > > .. ..$ Mean Sq: num [1:2] 7.47 0.55 > > .. ..$ F value: num [1:2] 13.6 NA > > .. ..$ Pr(>F) : num [1:2] 0.00268 NA > > *.. ..$ Thing : num **0.772413* > > > > ..- attr(*, "class")= chr [1:2] "summary.aov" "listof" > > > >Now, I know how to do this if I want to just add the variable to one > >element at a time: > >result[[1]][[1]]$Thing <- 0.5 > > > >But I can't figure out how to do it for every element at once (other than > >using a for loop). I am able to index an existing variable from each > >element of a list (using lapply or sapply, based on the examples from > > > http://stackoverflow.com/questions/1355355/how-to-avoid-a-loop-in-r-selecting-items-from-a-listand > >http://tolstoy.newcastle.edu.au/R/help/05/05/4678.html), but I can't > figure > >out how to *set* a new variable for each element in a list. Does anyone > > > >know how to do this? > > > >Thank you, > >Steve Polizer-Ahles > > > >-- > >Stephen Politzer-Ahles > >University of Kansas > >Linguistics Department > >http://people.ku.edu/~sjpa/ > > > > [[alternative HTML version deleted]] > > > > > >______________________________________________ > >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. > > > > > > > -- > Stephen Politzer-Ahles > University of Kansas > Linguistics Department > http://people.ku.edu/~sjpa/ > -- Stephen Politzer-Ahles University of Kansas Linguistics Department http://people.ku.edu/~sjpa/ [[alternative HTML version deleted]]
______________________________________________ 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.