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

Bert Gunter bgunter.4567 at gmail.com
Wed Feb 15 03:39:37 CET 2017

```Yes, exactly.

So my point is that this:

"X: a vector-like object that supports subsetting with `[`, typically
an atomic vector."

is incorrect, or at least a bit opaque, without further emphasizing
that FUN must accept the result of "[". With atomic vectors, the error
that you produced was obvious, but with lists, I believe not so. I
Appreciate the desire for brevity, but I think clarity should be the
primary goal. Maybe it *is* just me, but I think a few extra words of
explanation here would not go amiss.

But, anyway, thanks for the clarification.

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 6:04 PM, Hervé Pagès <hpages at fredhutch.org> wrote:
> 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.
>>>>
>>>>
>>>>   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
>>>>> 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
>>>> 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
>>> 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

```