我使用代码选择了原始数据集的几列:
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
无效?我该如何解决这个问题?
答案 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;应该是一个数字向量
检查这两个,希望它可以工作。