gpt4 book ai didi

R应用错误: 'X' must have named dimnames

转载 作者:行者123 更新时间:2023-12-02 10:50:39 24 4
gpt4 key购买 nike

“apply”文档提到“当‘X’命名为暗名称时,它可以是选择维度名称的字符向量。”我想仅对特定列在 data.frame 上使用 apply 。我可以使用暗名功能来执行此操作吗?

我意识到我可以使用 subset() X 来仅包含感兴趣的列,但我想更好地理解“命名的暗名”。

下面是一些示例代码:

> x <-  data.frame(cbind(1,1:10))
> apply(x,2,sum)
X1 X2
10 55
> apply(x,c('X2'),sum)
Error in apply(x, c("X2"), sum) : 'X' must have named dimnames
> dimnames(x)
[[1]]
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"

[[2]]
[1] "X1" "X2"
> names(x)
[1] "X1" "X2"
> names(dimnames(x))
NULL

最佳答案

如果我理解正确,您只想在某些列上使用 apply 。这不是命名的暗名所能实现的。矩阵或 data.frame 上的 apply 函数始终应用于所有行或所有列。命名的暗名称允许您选择按名称使用行或列,而不是“正常”12:

m <- matrix(1:12,4, dimnames=list(foo=letters[1:4], bar=LETTERS[1:3]))
apply(m, "bar", sum) # Use "bar" instead of 2 to refer to the columns

但是,如果您有想要应用的列名称,则可以通过首先仅选择这些列来实现:

n <- c("A","C")
apply(m[,n], 2, sum)
# A C
#10 42

命名的暗名称是暗名称作为列表存储在矩阵数组的“dimnames”属性中的副作用。列表的每个组件对应一个维度并且可以命名。这对于多维数组可能更有用......

对于data.frame,没有“dimnames”属性。 data.frame 本质上是一个列表,因此列表的“names”属性对应于列名称,额外的“row.names”属性对应于行名称。因此,没有地方可以存储暗名称的名称(当然,它们可以有一个额外的属性,但他们没有)。当您在 data.frame 上调用 dimnames 函数时,它只是根据“row.names”和“names”属性创建一个列表。

关于R应用错误: 'X' must have named dimnames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6958041/

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