On Mon, Apr 27, 2015 at 8:33 AM, peter dalgaard <pda...@gmail.com> wrote:
>
>> On 27 Apr 2015, at 13:48 , Hadley Wickham <h.wick...@gmail.com> wrote:
>>
>> Sometimes the absence of a name is maked by an NA:
>>
>> x <- 1:2
>> names(x)[[1]] <- "a"
>> names(x)
>> # [1] "a" NA
>>
>> Whereas other times its
>>
>> y <- c(a = 1, 2)
>> names(y)
>> # [1] "a" ""
>>
>> Is this deliberate? The help for names() is a bit murky, but an
>> example shows the NA behaviour.
>
> I think it is
>
> (a) impossible to change
> (b) at least somewhat coherent
>
> The situation is partially due to the fact that character-NA is a relative 
> latecomer to the language. In the beginning, there was no real distinction 
> between NA and "NA", causing issues when abbreviating Noradrenaline, North 
> America, Nelson Anderson, etc. At some point, it was decided to fix things 
> up, as far as possible in a backawards compatible way. Some common idioms 
> were retained but others were changed to comply with the rules for other 
> vector types.
>
> We have the empty string convention on (AFAICT) all constructor usages:
>
> c(a=1, 3)
> list(a=1, 3)
> cbind(a=1, 3)
>
> and also in the lists implied by argument matching
>
>> f <- function(...) names(match.call(expand.dots=TRUE))
>> f(a=1,3)
> [1] ""  "a" ""
>
> In contrast, assignment forms have the NA convention. This is consistent with 
> the general rules for complex assignment. E.g. we have
>

Ah, that explanation makes sense. Thanks.

It would be helpful to have a isNamed function that abstracted over
all these differences:

isNamed <- function(x) {
 nms <- names(x)
 if (is.null(nms)) return(rep(FALSE, length(x))

 !is.na(x) && x != ""
}

Hadley


-- 
http://had.co.nz/

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to