You could also call this "interesting example" a bug.
Clearly not enough code reuse in the implementation of tapply().
Instead of the current 25 lines of code, it could be a simple
wrapper around split() and sapply() e.g.. something like:
tapply2 <- function(X, INDEX, FUN=NULL, ..., simplify=TRUE)
{
f <- make_factor_from_INDEX(INDEX) # same as tapply(INDEX=INDEX,
FUN=NULL)
sapply(split(X, f), FUN, ..., simplify=simplify, USE.NAMES=FALSE)
}
and then be guaranteed to behave consistently with split() and
sapply(). Also the make_factor_from_INDEX() step maybe could be
shared with what aggregate.data.frame() does internally with its
'by' argument.
Still a mystery to me why the power of code sharing/reuse is so
often underestimated :-/
H.
On 02/15/2017 11:32 AM, Hadley Wickham wrote:
It seems like this should be consistent with split(), since that's
what actually powers the behaviour.
Reading the description for split leads to this rather interesting example:
tapply(mtcars, 1:11, I)
Hadley
On Tue, Feb 14, 2017 at 7:10 PM, Hervé Pagès <hpa...@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.gal...@gmail.com |
Read me: www.talgalili.com (Hebrew) | www.biostatistics.co.il (Hebrew) |
www.r-statistics.com (English)
----------------------------------------------------------------------------------------------
[[alternative HTML version deleted]]
______________________________________________
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.
--
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: hpa...@fredhutch.org
Phone: (206) 667-5791
Fax: (206) 667-1319
______________________________________________
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.
--
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: hpa...@fredhutch.org
Phone: (206) 667-5791
Fax: (206) 667-1319
______________________________________________
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.