[R] (no subject)
FERNANDO MANSITO CABALLERO
fernando.mansito at gmail.com
Mon Oct 19 18:44:19 CEST 2015
Hi,
I am very grateful to you all, because (as you well know) if you make the
database flat,
> Empl1 <- list(employee="Anna",spouse="Fred",children=3,
+ child.ages=c(4,7,9),employee="John",spouse="Mary",children=2,
+ child.ages=c(14,17))
adding a record with the same status as the first ones is feasible:
> Empl1 <- c(Empl1,employee="Liz",spouse="Paul",children=1,child.ages=8)
and once, thanks to you all, one learns how to obtain a first sample,
> unlist(Empl1[c(2,6,10)])
spouse spouse spouse
"Fred" "Mary" "Paul"
it would seem that one has broken the bad spell:
> unlist(Empl1[c(2,6,10)][Empl1[c(1,5,9)]==c("Anna","John","Pete")])
spouse spouse
"Fred" "Mary"
However, one gets more correct matches but not everywhere (Anna Liz, John
Liz give incorrect
results, Fred and named character(0) respectively). I have read ?"[" but I
have not found where
my mistake is (1).
(1)In particular, the help says "Recursive (list-like) objects: indexing by
[ is similar to
atomic vectors and selects a list of the specified element(s)." More
generally, "] can select
more than one element" (as opposed to [[, $). I have tested with no added
packages and with all
my normally loaded packages and get the same problems in R3.2.2 Windows.
Fernando
On Mon, Oct 5, 2015 at 5:58 PM, FERNANDO MANSITO CABALLERO <
fernando.mansito at gmail.com> wrote:
> Hi
>
> Thanks a lot to all of you for your solutions and explanations.
>
> On Sun, Oct 4, 2015 at 10:34 PM, David Winsemius <dwinsemius at comcast.net>
> wrote:
>
>>
>> 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
>>
>>
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list