[R] ave(x, y, FUN=length) produces character output when x is character
Duncan Murdoch
murdoch.duncan at gmail.com
Fri Dec 26 13:00:59 CET 2014
On 25/12/2014 11:30 PM, Mike Miller wrote:
> 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.
That page documents a function that is named poorly. "is.vector"
doesn't test for vectors in the sense used in most other places, it
tests for a "vector of the specified mode having no attributes other
than names". The page also points out a third meaning for the word,
i.e. "the formal class "vector" in the methods package".
So all your confusion is somewhat understandable, but it's still tiresome.
Duncan Murdoch
>
>
>>> 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.
>
> Mike
>
More information about the R-help
mailing list