Subsetting objects with attributes are present do not behave consistently.
The exception is the empty vector subscript.


Let's look at an example.

> foo <- matrix(1:16, 4, dimnames=list(letters[1:4], letters[5:8]))
> names(foo) <- LETTERS[1:16] # add names
> attr(foo, 'bar') <- TRUE # and an extra attribute
> foo
  e f  g  h
a 1 5  9 13
b 2 6 10 14
c 3 7 11 15
d 4 8 12 16
attr(,"names")
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P"
attr(,"bar")
[1] TRUE
> foo[] # returns the original object
  e f  g  h
a 1 5  9 13
b 2 6 10 14
c 3 7 11 15
d 4 8 12 16
attr(,"names")
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P"
attr(,"bar")
[1] TRUE
> foo[,] # but this does not
  e f  g  h
a 1 5  9 13
b 2 6 10 14
c 3 7 11 15
d 4 8 12 16
> foo[1:16] # neither does this
 A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16
>

Basically, foo[] behaves differently from others. Every other subset operation drops attributes (other than those directly relevent).

In case anyone is wondering, for Splus (old 3.4 on a Sun), the results
are same for all but the matrix subset operation. Then we get

Splus3.4> foo[,]
  e f  g  h
a 1 5  9 13
b 2 6 10 14
c 3 7 11 15
d 4 8 12 16
attr(,"names")
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P"

In fact if a names attribute is present, Splus always subsets it as if it was an array with same dimensions as the actual object.

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-devel

Reply via email to