有没有办法命名列名或行名?

Is there a way to name column names or rownames?

, , RE

     Midterm Final mean
A       81.9  75.1 78.5
B       78.3  69.2 73.8
C       79.6  74.4 77.0
mean    79.9  72.9 76.4

我正在尝试命名行和列,以便“主题”位于“A、B、C 和平均值”行上方,而“考试”位于列上方。我还希望 header 是“Initial = RE”而不仅仅是“RE”。

要构造一个名为 dimnames 的数组,将一个命名列表作为 dimnames 参数传递给 matrixarray:

x <- array(seq_len(18L), dim = c(3L, 3L, 2L),
           dimnames = list(D1 = letters[1:3], D2 = letters[4:6], D3 = letters[7:8]))
x
## , , D3 = g
## 
##    D2
## D1  d e f
##   a 1 4 7
##   b 2 5 8
##   c 3 6 9
## 
## , , D3 = h
## 
##    D2
## D1   d  e  f
##   a 10 13 16
##   b 11 14 17
##   c 12 15 18

要修改现有数组以使其命名为 dimnames,请设置 dimnames 属性的 names 属性:

y <- array(seq_len(18L), dim = c(3L, 3L, 2L),
           dimnames = list(letters[1:3], letters[4:6], letters[7:8]))
names(dimnames(y)) <- c("D1", "D2", "D3")

identical(x, y)
## [1] TRUE

但是,请注意,如果 dimnames(y)NULLnames(dimnames(y)) <- value 将不起作用:

z <- array(seq_len(18L), dim = c(3L, 3L, 2L))
names(dimnames(z)) <- c("D1", "D2", "D3")
## Error in names(dimnames(z)) <- c("D1", "D2", "D3") : 
##   attempt to set an attribute on NULL

在上述情况下,要获得命名但“空”dimnames,您必须执行类似

的操作
dimnames(z) <- list(D1 = NULL, D2 = NULL, D3 = NULL)

或等同于

dimnames(z) <- setNames(vector("list", 3L), c("D1", "D2", "D3"))

现在:

z
## , , 1
## 
##       D2
## D1     [,1] [,2] [,3]
##   [1,]    1    4    7
##   [2,]    2    5    8
##   [3,]    3    6    9
## 
## , , 2
## 
##       D2
## D1     [,1] [,2] [,3]
##   [1,]   10   13   16
##   [2,]   11   14   17
##   [3,]   12   15   18

有趣的是,我们在 print 输出中没有看到 D3 = 1D3 = 2可能是一个错误 - 我得问问楼上的人。