From bernd_bischl at gmx.net  Tue Aug  4 15:10:23 2009
From: bernd_bischl at gmx.net (Bernd Bischl)
Date: Tue, 04 Aug 2009 15:10:23 +0200
Subject: [Rd] Inconsistencies in missing names of a list?
Message-ID: <4A78333F.7080208@gmx.net>

Hi,

I would like to discuss whether the following behaviour in lists is 
indeed intended:

###################################################
 > sessionInfo()
R version 2.10.0 Under development (unstable) (2009-07-21 r48968)
i386-pc-mingw32

locale:
[1] LC_COLLATE=German_Germany.1252  LC_CTYPE=German_Germany.1252  [3] 
LC_MONETARY=German_Germany.1252 LC_NUMERIC=C                  [5] 
LC_TIME=German_Germany.1252  
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base 
###################################################

# case 1
x1 <- list(1, 2)
names(x1)[2]
# returns NULL

# case 2
x2 <- list(foo=1, 2)
names(x2)[2]
# returns ""

# case 3
x3 <- list(1, 2)
names(x3)[1] <- "foo"
names(x3)[2]
# returns NA

###################################################

Although I don't find it particularly good that 1) and 2)  behave 
differently, I can very well understand what happens and accept this.

I may also understand (on a technical level) what happens in 3), but I 
find it very disturbing that these lines

x2 <- list(foo=1, 2)
x3 <- list(1, 2)
names(x3)[1] <- "foo"

produce different results.

?names says

" The name |""| is special: it is used to indicate that there is no name 
associated with an element of a (atomic or generic) vector. Subscripting 
by |""| will match nothing (not even elements which have no name).

A name can be character |NA|, but such a name will never be matched and 
is likely to lead to confusion."

If it "likely leads to confusion" why does the implementation use it?

Regards,

Bernd Bischl



[Rd] Inconsistencies in missing names of a list?
Bernd Bischl