我用代码选择了我的原始数据集的几列:
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
我试图删除 names/dimnames,但这揭示了类似的错误。为什么我的
dimnames
无效?我该如何解决这个问题?
我假设您使用的是“memisc”包中的
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
的data.set
,而你提到在这些情况下你会遇到类似的错误。我的猜测是你试图将它们设置为NULL
,这是行不通的。从?dimnames
的“注意”部分:
设置dimnames的组件,例如,
是一个常见的范例,但请注意,如果分配的值为dimnames(A)[[1]] <- value
,它将不起作用。使用NULL
代替,或者(就像它一样)操纵整个 dimnames 列表。rownames
我认为你应该遵循以下结构:
train.data -> should be a matrix
train.label -> should be a numeric vector
检查这两个,希望它能起作用。