5

更改行的名称很容易(例如,使用rownames()),但这不是我想要的。考虑:

> newTab <- xtabs(~as.factor(letters[1:2])+LETTERS[1:2])
> newTab
                       LETTERS[1:2]
as.factor(letters[1:2]) A B
                      a 1 0
                      b 0 1

我想得到这个:

          upper case
lower case A B
         a 1 0
         b 0 1

但如果我尝试:

> dimnames(newTab) <- list("lower case", "upper case")

我收到一个错误:

dimnames(newTab) <- list("lower case", "upper case") 中的错误:
'dimnames' [1] 的长度不等于数组范围

4

1 回答 1

12

看看输出str(newTab)

> str(newTab)
 xtabs [1:2, 1:2] 1 0 0 1
 - attr(*, "dimnames")=List of 2
  ..$ as.factor(letters[1:2]): chr [1:2] "a" "b"
  ..$ LETTERS[1:2]           : chr [1:2] "A" "B"
 - attr(*, "class")= chr [1:2] "xtabs" "table"
 - attr(*, "call")= language xtabs(formula = ~as.factor(letters[1:2]) + LETTERS[1:2])

as.factor(letters[1:2])并且LETTERS[1:2]dimnames列表的名称。所以你真的想设置dimnames列表的名称,而不是 dimnames 本身。您可以通过以下方式做到这一点:

> dimnames(newTab) <- setNames(dimnames(newTab),c("lower case", "upper case"))
> # or
> names(dimnames(newTab)) <- c("lower case", "upper case")
> newTab
          upper case
lower case A B
         a 1 0
         b 0 1
于 2013-08-09T20:32:58.053 回答