"Input datasets must be dataframes" R 中的 kamila 包错误

"Input datasets must be dataframes" error in kamila package in R

我有一个混合类型的数据集,一个连续变量和八个分类变量,所以我想尝试 kamila 聚类。当我使用一个连续变量时它给我一个错误,但是当我使用两个连续变量时它起作用了。

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)

Error in kamila(conVar = conVar[testInd, ], catFactor = catFactor[testInd, : Input datasets must be dataframes

我认为问题在于该函数假定您至少具有两种数据类型(即 >= 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 中选择行,但在这种情况下 returns 默认情况下是一个向量。因此,即使您提供了 data.frame,您最终也会得到 "not a data.frame"。这就是错误的来源。

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

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

并将其保存为您自己的函数版本 say my_kamila,您可以改用它。

希望对您有所帮助。