为数据集给出的“dimnames”无效

问题描述 投票:0回答: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

我试图删除 names/dimnames,但这揭示了类似的错误。为什么我的

dimnames
无效?我该如何解决这个问题?

r pca
2个回答
3
投票

我假设您使用的是“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
,它将不起作用。使用
rownames
代替,或者(就像它一样)操纵整个 dimnames 列表。


2
投票

我认为你应该遵循以下结构:

train.data -> should be a matrix  
train.label -> should be a numeric vector  

检查这两个,希望它能起作用。

© www.soinside.com 2019 - 2024. All rights reserved.