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.

Reply via email to