How far would you like to go with the automatic creation of dimnames in nested replacement operations on arrays? It currently works nicely with [<- > a <- array(numeric(), dim=c(2,0,1)); dimnames(a)[3] <- list("One") > str(a) num[1:2, 0 , 1] - attr(*, "dimnames")=List of 3 ..$ : NULL ..$ : NULL ..$ : chr "One"
It works most of the time (except for length=1) for [[<- > a <- array(numeric(), dim=c(2,0,1)); dimnames(a)[[1]] <- c("X1","X2") > a <- array(numeric(), dim=c(2,0,1)); dimnames(a)[[2]] <- character() > a <- array(numeric(), dim=c(2,0,1)); dimnames(a)[[3]] <- "Z1" Error in dimnames(a)[[3]] <- "Z1" : 'dimnames' must be a list It does not work at all for names<-. > a <- array(numeric(), dim=c(2,0,1)); names(dimnames(a)) <- c("X","Y","Z") Error in names(dimnames(a)) <- c("X", "Y", "Z") : attempt to set an attribute on NULL > a <- array(numeric(), dim=c(2,0,1)); dimnames(a)<-vector("list",3); names(dimnames(a)) <- c("X","Y","Z") > str(a) num[1:2, 0 , 1] - attr(*, "dimnames")=List of 3 ..$ X: NULL ..$ Y: NULL ..$ Z: NULL Bill Dunlap TIBCO Software wdunlap tibco.com On Wed, Feb 19, 2020 at 6:24 AM Serguei Sokol <so...@insa-toulouse.fr> wrote: > Hi, > > I was bitten by a little incoherence in dimnames assignment or may be I > missed some point. > Here is the case. If I assign row names via dimnames(a)[[1]], when > nrow(a)=1 then an error is thrown. But if I do the same when nrow(a) > 1 > it's OK. Is one of this case works unexpectedly? Both? Neither? > > a=as.matrix(1) > dimnames(a)[[1]]="a" # error: 'dimnames' must be a list > > aa=as.matrix(1:2) > dimnames(aa)[[1]]=c("a", "b") # OK > > In the second case, dimnames(aa) is not a list (like in the first case) > but it works. > I would expect that the both work or neither. > > Your thoughts are welcome. > Best, > Serguei. > > PS the same apply for dimnames(a)[[2]]<-. > > > sessionInfo() > R version 3.6.1 (2019-07-05) > Platform: x86_64-pc-linux-gnu (64-bit) > Running under: Mageia 7 > > Matrix products: default > BLAS/LAPACK: /home/opt/OpenBLAS/lib/libopenblas_sandybridge-r0.3.6.so > > locale: > [1] LC_CTYPE=fr_FR.UTF-8 LC_NUMERIC=C > [3] LC_TIME=fr_FR.UTF-8 LC_COLLATE=fr_FR.UTF-8 > [5] LC_MONETARY=fr_FR.UTF-8 LC_MESSAGES=fr_FR.UTF-8 > [7] LC_PAPER=fr_FR.UTF-8 LC_NAME=C > [9] LC_ADDRESS=C LC_TELEPHONE=C > [11] LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C > > attached base packages: > [1] parallel stats graphics grDevices utils datasets methods > [8] base > > other attached packages: > [1] multbxxc_1.0.1 rmumps_5.2.1-11 > [3] arrApply_2.1 RcppArmadillo_0.9.800.4.0 > [5] Rcpp_1.0.3 slam_0.1-47 > [7] nnls_1.4 > > loaded via a namespace (and not attached): > [1] compiler_3.6.1 tools_3.6.1 codetools_0.2-16 > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel