2

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

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无效?我该如何解决?

4

2 回答 2

2

我假设您使用data.set的是“memisc”包。data.set如果是这种情况,您应该能够通过将您的in包装起来来解决您的问题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.

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

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

于 2013-05-31T07:33:22.980 回答
2

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

于 2017-06-22T08:59:19.310 回答