[R] ave(x, y, FUN=length) produces character output when x is character

Mike Miller mbmiller+l at gmail.com
Fri Dec 26 05:30:13 CET 2014

On Thu, 25 Dec 2014, Bert Gunter wrote:

> You persist in failing to read the docs!

"the docs" -- do those exclude those I have been quoting and linking to?

> Moreover, neither Hadley Wickham, nor anyone else, is the authoritative 
> source for R usage (other than for the (many!) packages he, himself has 
> authored). R's Help pages and manuals -- and ultimately the source code 
> -- are the only such source.

Very pendantic.  Are you saying that Hadley Wickham's claim was incorrect? 
To repeat, he said that this would return TRUE if x were a vector:

is.atomic(x) || is.list(x)

If you think that is wrong, I'd be interested to know more about that.

> ?factor says in its very first line:
> "The function factor is used to encode a **vector** as a factor (the 
> terms ‘category’ and ‘enumerated type’ are also used for factors)...." 
> (emphasis added)

So what?  Are you saying that a factor *is* a vector?  I quoted this 
before, but I'll repeat it here -- from the third paragaraph of the 
Details section of ?vector:

    Note that factors are _not_ vectors; ‘is.vector’ returns ‘FALSE’
    and ‘as.vector’ converts a factor to a character vector for ‘mode
    = "any"’.

I guess that is an "authoritative source" by your criteria even though it 
isn't in the first line of the page.

>> f <- factor (letters[1:3])
>> f
> [1] a b c
> Levels: a b c
>> attributes(f)
> $levels
> [1] "a" "b" "c"
> $class
> [1] "factor"
>> is.vector(f)
> [1] FALSE
>> attributes(f) <- NULL
>> f
> [1] 1 2 3
>> is.vector(f)
> [1] TRUE

And your point is what?  Yes, we can convert between different kinds of 
objects.  Are you saying that a factor *is* a vector because you can 
coerce it into a vector by removing its attributes?

I do think it is very central to this discussion that attributes(x) <- 
NULL makes x into a vector, and that is not true just for factors, but 
also matrices, as you showed me earlier.  Following your lead, this is 
another example:

> b <- 1:4

> attr(b, "dim") <- c(2,2)

> is.matrix(b)
[1] TRUE

Does that mean that "a matrix is a vector"?  Not for me, but it does make 
it easy to see how that concept helps people to understand the internal 
workings of R.  Gabor Grothendieck wrote, "I think its the idea that in R 
all data objects are vectors (for some notion of vector) in the sense that 
all Lisp objects are lists, all APL objects are arrays and all tcl objects 
are character strings."  That's how I've been thinking about it, too, but 
I'm not sure that *all* data objects are vectors in this sense.  If that 
were the case, the Wickham test would always return TRUE.

> Don't you think it's time to call a halt to this?

You go first.


Michael B. Miller, Ph.D.
University of Minnesota

More information about the R-help mailing list