R语言 是否有一种方法来命名列名或行名?

y1aodyip  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(152)
, , 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

我正在尝试命名行和列,以便“Subject”位于行“A,B,C,and mean”的上方,“Exam”位于列的上方。我还希望标题为“Initial = RE”,而不仅仅是“RE”。

kjthegm6

kjthegm61#

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

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)NULL,则names(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。这 * 可能 * 是一个bug -我必须问问楼上的人。

相关问题