[R] Is a list an atomic object? (or is there an issue with the help page of ?tapply ?)

Hervé Pagès hpages at fredhutch.org
Wed Feb 15 03:04:01 CET 2017


Right. More precisely the function passed thru the FUN argument must
work on the subsets of X generated internally by tapply(). You can
actually see these subsets by passing the identity function:

   X <- letters[1:10]
   INDEX <- c(rep(1,5),rep(2,5))
   tapply(X, INDEX, FUN=identity)
   # $`1`
   # [1] "a" "b" "c" "d" "e"
   #
   # $`2`
   # [1] "f" "g" "h" "i" "j"

Doing this shows you how tapply() splits the vector-like object X into
a list of subsets. If you replace the identity function with a function
that cannot be applied to these subsets, then you get an error:

   tapply(X, INDEX, FUN=sum)
   # Error in FUN(X[[i]], ...) : invalid 'type' (character) of argument

As you can see, here we get an error even though X is an atomic vector.

H.


On 02/14/2017 05:41 PM, Richard M. Heiberger wrote:
> The problem with Bert's second example is that sum doesn't work on a list.
> The tapply worked correctly.
>
>> unlist(l[1:5])
> [1] 1 2 3 4 5
>
>> sum(l[1:5])
> Error in sum(l[1:5]) : invalid 'type' (list) of argument
>
>
>
> On Tue, Feb 14, 2017 at 8:28 PM, Bert Gunter <bgunter.4567 at gmail.com> wrote:
>> Hervé:
>>
>> Kindly explain this, then:
>>
>>> l <- as.list(1:10)
>>> is.atomic(l) # FALSE
>> [1] FALSE
>>> index <- c(rep(1,5),rep(2,5))
>>>
>>>
>>> tapply(l,index,unlist)
>> $`1`
>> [1] 1 2 3 4 5
>>
>> $`2`
>> [1]  6  7  8  9 10
>>
>>>
>>> ## But
>>>
>>> tapply(l,index, sum)
>> Error in FUN(X[[i]], ...) : invalid 'type' (list) of argument
>>
>> Cheers,
>> Bert
>> Bert Gunter
>>
>> "The trouble with having an open mind is that people keep coming along
>> and sticking things into it."
>> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
>>
>>
>> On Tue, Feb 14, 2017 at 5:10 PM, Hervé Pagès <hpages at fredhutch.org> wrote:
>>> Hi,
>>>
>>> tapply() will work on any object 'X' that has a length and supports
>>> single-bracket subsetting. These objects are sometimes called
>>> "vector-like" objects. Atomic vectors, lists, S4 objects with a "length"
>>> and "[" method, etc... are examples of "vector-like" objects.
>>>
>>> So instead of saying
>>>
>>>   X: an atomic object, typically a vector.
>>>
>>> I think it would be more accurate if the man page was saying something
>>> like
>>>
>>>   X: a vector-like object that supports subsetting with `[`, typically
>>>      an atomic vector.
>>>
>>> H.
>>>
>>> On 02/04/2017 04:17 AM, Tal Galili wrote:
>>>>
>>>> In the help page of ?tapply it says that the first argument (X) is "an
>>>> atomic object, typically a vector."
>>>>
>>>> However, tapply seems to be able to handle list objects. For example:
>>>>
>>>> ###################
>>>>
>>>> l <- as.list(1:10)
>>>> is.atomic(l) # FALSE
>>>> index <- c(rep(1,5),rep(2,5))
>>>> tapply(l,index,unlist)
>>>>
>>>>> tapply(l,index,unlist)
>>>>
>>>> $`1`
>>>> [1] 1 2 3 4 5
>>>>
>>>> $`2`
>>>> [1]  6  7  8  9 10
>>>>
>>>>
>>>> ###################
>>>>
>>>> Hence, does it mean a list an atomic object? (which I thought it wasn't)
>>>> or
>>>> is the help for tapply needs updating?
>>>> (or some third option I'm missing?)
>>>>
>>>> Thanks.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> ----------------Contact
>>>> Details:-------------------------------------------------------
>>>> Contact me: Tal.Galili at gmail.com |
>>>> Read me: www.talgalili.com (Hebrew) | www.biostatistics.co.il (Hebrew) |
>>>> www.r-statistics.com (English)
>>>>
>>>> ----------------------------------------------------------------------------------------------
>>>>
>>>>         [[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.
>>>>
>>>
>>> --
>>> Hervé Pagès
>>>
>>> Program in Computational Biology
>>> Division of Public Health Sciences
>>> Fred Hutchinson Cancer Research Center
>>> 1100 Fairview Ave. N, M1-B514
>>> P.O. Box 19024
>>> Seattle, WA 98109-1024
>>>
>>> E-mail: hpages at fredhutch.org
>>> Phone:  (206) 667-5791
>>> Fax:    (206) 667-1319
>>>
>>> ______________________________________________
>>> 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.
>>
>> ______________________________________________
>> 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.

-- 
Hervé Pagès

Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024

E-mail: hpages at fredhutch.org
Phone:  (206) 667-5791
Fax:    (206) 667-1319



More information about the R-help mailing list