【问题标题】:Invalid 'dimnames' given for data set为数据集提供的“dimnames”无效
【发布时间】:2013-05-26 21:55:29
【问题描述】:

我用代码选择了我原始数据集的几列:

envfriend <- data.l1[c("eb_1","eb_2","eb_33","eb_34","eb_35","eb_36","eb_transpo","eb_read","eb_notetaking","eb_beverage","eb_breakfast","eb_lunch","eb_dinner")]

当我尝试对这个新数据集(它是一个 data.set,而不是 data.frame)进行主成分分析时,我得到了错误:

Error in `dimnames<-`(`*tmp*`, value = dimnames) :
invalid 'dimnames' given for data set

我已尝试删除名称/维度名称,但这显示了类似的错误。为什么我的dimnames 无效?我该如何解决这个问题?

【问题讨论】:

  • 你能做一个可重现的小例子来说明你正在经历的事情吗?
  • 你说这不是data.frame。什么是“data.set”,用什么包来管理这些对象?

标签: r pca rowname


【解决方案1】:

我假设您使用的是“memisc”包中的data.set。如果是这种情况,您应该能够按照?data.set 中的建议将您的data.set 包装在as.data.frame 中来解决您的问题。

这是一个使用 R 附带的 USArrests 数据集的示例。我创建了一个 data.set 版本并尝试运行 princomp 并得到您提到的错误。

这就是 princomp 在原始 data.frame 上的工作方式。

princomp(USArrests, cor = TRUE)
# Call:
# princomp(x = USArrests, cor = TRUE)
# 
# Standard deviations:
#    Comp.1    Comp.2    Comp.3    Comp.4 
# 1.5748783 0.9948694 0.5971291 0.4164494 
# 
#  4  variables and  50 observations.

现在,让我们创建一个 data.set 版本:

library(memisc)
ARRESTS <- data.set(USArrests)
rownames(ARRESTS) <- rownames(USArrests)

这是你得到错误的地方:

princomp(ARRESTS, cor = TRUE)
# Error in `dimnames<-`(`*tmp*`, value = dimnames) : 
#   invalid 'dimnames' given for data set

这就是你可以尝试解决的方法:

princomp(as.data.frame(ARRESTS), cor = TRUE)
# Call:
# princomp(x = data.frame(ARRESTS), cor = TRUE)
# 
# Standard deviations:
#    Comp.1    Comp.2    Comp.3    Comp.4 
# 1.5748783 0.9948694 0.5971291 0.4164494 
# 
#  4  variables and  50 observations.

请注意,我能够修改data.setrownames,而您提到在这些情况下您会遇到类似的错误。我的猜测是您试图将它们设置为NULL,这是行不通的。来自?dimnames的“注意”部分:

设置dimnames的组件,例如dimnames(A)[[1]] &lt;- value是一种常见的范例,但请注意,如果分配的值是NULL,它将不起作用。请改用rownames,或(照此执行)操作整个 dimnames 列表。

【讨论】:

    【解决方案2】:

    我认为您应该遵循以下结构:
    train.data -> 应该是一个矩阵
    train.label -> 应该是一个数字向量
    检查这两个,希望它可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-17
      • 2011-02-07
      相关资源
      最近更新 更多