class(L$b-6ren">
gpt4 book ai didi

矩阵的R dimnames,奇怪的行为

转载 作者:行者123 更新时间:2023-12-04 10:33:21 24 4
gpt4 key购买 nike

这是 R 中的错​​误还是有意义?

## works
aa <- matrix(nrow=1,ncol=2)
dimnames(aa)[[2]] <- c("a","b")
dimnames(aa)[[1]] <- c("c")

## does not work
bb <- matrix(nrow=1,ncol=2)
dimnames(bb)[[1]] <- c("c")
Error in dimnames(bb)[[1]] <- c("c") : 'dimnames' must be a list

感谢您的解释!

最佳答案

这是预期的行为。当您分配给对象元素的索引时,如果该元素不存在,R 将创建该元素。在您的示例中,aa 中不存在“dimnames”。 ,因此 R 尝试根据您分配给它的内容创建“dimnames”。考虑为列表分配名为“a”、“b”和“c”的元素:

> L <- list()
> L$a[[1]] <- 5
> L$b[[3]] <- "foo"
> L$c[[4]] <- c(1,2,3)
> class(L$a)
[1] "numeric"
> class(L$b)
[1] "character"
> class(L$c)
[1] "list"

现在说 L$a[[1]] <- anything 的问题是L$a还不存在。当一个元素不存在时会发生什么,R 只是创建了最简单的可以工作的元素类型。如您所见,L$a[[1]] <- 5如果 L$a 会有意义是一个数值向量,所以 R 使它成为一个数值向量。 L$b[[3]] <- "foo"如果 L$b 没有意义是一个数值向量,但如果 L$b 是有意义的是一个字符向量,所以这就是 R 创建的。但是L$c[[4]] <- c(1,2,3)只有在 L$c 时才会发生是一个列表,所以在这种情况下你会得到一个列表。

在您的情况下,它会尝试创建 dimnames根据该规则;所以它使dimnames(aa)一个列表,但它只会使 dimnames(bb)一个字符向量。但是dimnames有一个额外的约束,它必须是一个列表,所以它反对,你会得到一个错误。

关于矩阵的R dimnames,奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12578461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com