"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,您可以改用它。
希望对您有所帮助。
我有一个混合类型的数据集,一个连续变量和八个分类变量,所以我想尝试 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,您可以改用它。
希望对您有所帮助。