R中kamila包中的“输入数据集必须是数据帧”错误

时间:2018-05-27 23:07:18

标签: r cluster-analysis

我有一个混合类型数据集,一个连续变量和8个分类变量,所以我想尝试kamila群集。当我使用一个cont时它会出错。变量,但当我使用两个续时。它正在起作用的变量。

library(kamila)

data <- read.csv("mixed.csv",header=FALSE,sep=";")

conInd <- 9

conVars <- data[,conInd]

conVars <- data.frame(scale(conVars))

catVarsFac <- data[,c(1,2,3,4,5,6,7,8)]

catVarsFac[] <- lapply(catVarsFac, factor)

kamRes <- kamila(conVars, catVarsFac, numClust=5, numInit=10,calcNumClust = "ps",numPredStrCvRun = 10, predStrThresh = 0.5)

kamila中的错误(conVar = conVar [testInd,],catFactor = catFactor [testInd,:   输入数据集必须是数据框

1 个答案:

答案 0 :(得分:1)

我认为问题在于该函数假设您同时拥有两种数据类型中的至少两种(即> = 2个连续变量,而> = 2个类别变量)。看起来您提供了一个列索引(conInd = 9,仅列9),因此数据中只有一个连续变量。尝试将另一个连续变量添加到您的连续数据中。

我遇到了同样的问题(分类问题),这种方法为我解决了这个问题。

我认为程序中错误的最终原因是在源代码的170行附近。这是相关的代码段...

numObs <- nrow(conVar)
numInTest <- floor(numObs/2)
for (cvRun in 1:numPredStrCvRun) {
  for (ithNcInd in 1:length(numClust)) {
    testInd <- sample(numObs, size = numInTest, replace = FALSE)
    testClust <- kamila(conVar = conVar[testInd,], 
                        catFactor = catFactor[testInd, ], 
                        numClust = numClust[ithNcInd], 
                        numInit = numInit, conWeights = conWeights, 
                        catWeights = catWeights, maxIter = maxIter, 
                        conInitMethod = conInitMethod, catBw = catBw, 
                        verbose = FALSE)

当代码将数据划分为训练集时,它是从一列data.frame中选择行,但是在这种情况下,默认情况下会返回向量。因此,即使您确实提供了data.frame,您最终还是得到“不是data.frame”。这就是错误的来源。

如果您无法挖掘出另一个变量来添加到数据中,则可以编辑代码,以便在cvRun for循环中对kamila的调用将data.frame()函数包装在任何子集的conVar或catFactor周围,例如

testClust <- kamila(conVar    = data.frame(conVar[testInd,]), 
                    catFactor = data.frame(catFactor[testInd,], ... )

,然后将其另存为自己的函数my_kamila,您可以使用它代替。

希望这会有所帮助。