[R] (no subject)

William Dunlap wdunlap at tibco.com
Mon Oct 19 21:01:05 CEST 2015


You are making a long list with multiple components with the same name.
You probably want to make list of lists, with each component list
representing one employee.    E.g.,
  > 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))
  > Empl2 <- list(employee="Liz",spouse="Paul",children=1,child.ages=8)
  > Employees <- list(Empl1, Empl2)
  > vapply(Employees, function(x)x[["spouse"]], "")
  [1] "Fred" "Paul"
  > sapply(Employees, function(x)x[["children"]])
  [1] 3 1
  > lapply(Employees, function(x)x[["child.ages"]])
  [[1]]
  [1] 4 7 9

  [[2]]
  [1] 8

Bill Dunlap
TIBCO Software
wdunlap tibco.com


On Mon, Oct 19, 2015 at 9:44 AM, FERNANDO MANSITO CABALLERO
<fernando.mansito at gmail.com> wrote:
> 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]]
>
> ______________________________________________
> R-help at 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.



More information about the R-help mailing list