为数据集指定的“dimnames”无效

时间:2013-05-31 06:38:01

标签: r pca rowname

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

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,但这显示了类似的错误。为什么dimnames无效?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

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

以下是使用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.

请注意,我可以修改rownames的{​​{1}},而您提到在这些情况下您遇到了类似的错误。我的猜测是你试图将它们设置为data.set,这是行不通的。来自&#34; Note&#34; NULL部分:

  

设置dimnames的组件,例如?dimnames是一种常见的范例,但请注意,如果指定的值为dimnames(A)[[1]] <- value,它将无效。改为使用NULL或(因为它)操纵整个dimnames列表。

答案 1 :(得分:2)

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