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.

Reply via email to