On Oct 4, 2015, at 11:31 AM, FERNANDO MANSITO CABALLERO wrote: > Dear Madam/Sir, > > I am trying to understand R and I have come to a stumbling block. i > have written: > >> Empl <- list(employee="Anna",family=list(spouse="Fred",children=3, > +child.ages=c(4,7,9)),employee="John",family=list(spouse="Mary",children=2, > +child.ages=c(14,17))) >> $family$spouse > [1] "Fred" >> #instead of [1] "Fred" "Mary" > > Where am I wrong?
The $ function is short-hand for "[[" (with an unevaluated argument). The "[[" function is not able to deliver multiple values. You might think you needed to use: sapply( Empl[c(2,4)], function(x){ x$family$spouse ) And you cannot use that construction or its equivalent, because sapply and lapply do not pass the names of their arguments: > sapply( Empl[c(2,4)], function(x){ x[['family']]['spouse']} ) $family NULL $family NULL #----------- This succeeds: > sapply( Empl[grepl('family', names(Empl)) ], function(x){x$spouse}) family family "Fred" "Mary" -- David Winsemius Alameda, CA, USA ______________________________________________ R-help@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.