[Rd] Inquiry about the behaviour of subsetting and names in matrices
Karolis Koncevičius
k@ro||@@koncev|c|u@ @end|ng |rom gm@||@com
Wed May 3 09:36:30 CEST 2023
Hello,
I have stumbled upon a few cases where the behaviour of naming and subsetting in matrices seems unintuitive.
All those look related so wanted to put everything in one message.
1. Why row/col selection by names with NAs is not allowed?
x <- setNames(1:10, letters[1:10])
X <- matrix(x, nrow=2, dimnames = list(letters[1:2], LETTERS[1:5]))
x[c(1, NA, 3)] # vector: works and adds "NA"
x[c("a", NA, "c")] # vector: works and adds "NA"
X[,c(1, NA, 3)] # works and selects "NA" column
X[,c("A", NA, "C")] # <error>
2. Should setting names() for a matrix be allowed?
names(X) <- paste0("e", 1:length(X))
X["e4"] # works
# but any operation on a matrix drops the names
X <- X[,-1] # all names are gone
X["e4"] # <error>
Maybe names() should not be allowed on a matrix?
3. Should selection of non-existent dimension names really be an error?
x[22] # works on a vector - gives "NA"
X[,22] # <error>
A potential useful use-case is matching a smaller matrix to a larger one:
A <- matrix(rnorm(10), nrow=2, dimnames = list(c("a","c")))
B <- matrix(rnorm(20), nrow=4, dimnames = list(c("a", "b", "c", "d")))
# matching larger matrix to the smaller one <works>
B[rownames(A),]
# matching smaller matrix to the larger one <error>
A[rownames(B),]
These also doesn't seem to be documented in '[', 'names', 'rownames’.
Interested if there specific reasons for this behaviour, or could these potentially be adjusted?
Kind regards,
Karolis K.
More information about the R-devel
mailing list