我正在使用此处找到的数据集:http://archive.ics.uci.edu/ml/datasets/Qualitative_Bankruptcy
运行代码时: 库(脱字符号)
bank <- read.csv("Qualitative_Bankruptcy.data.txt", header=FALSE, na.strings = "?",
strip.white = TRUE)
x=bank[1:6]
y=bank[7]
bank.knn <- train(x, y, method= "knn", trControl = trainControl(method = "cv"))
我收到以下错误: 错误:nrow(x)== n不为TRUE
我发现的唯一例子是Error: nrow(x) == n is not TRUE when using Train in Caret;我的Y已经是一个有两个类的因子向量,所有的X特征都是因子。我尝试在X和Y上使用as.matrix和as.data.frame但没有成功。
nrow(x)等于250,但我不确定n在包中指的是什么。
答案 0 :(得分:5)
y
实际上不是一个向量,而是一个包含一列的data.frame,因为bank[7]
不会将第7列转换为向量,因此length(y)
为1.使用{{ 1}}而不是。它对bank[, 7]
没有影响,但它也可以由x
生成。
此外,为了使KNN工作,您可能必须将由因子变量组成的bank[, 1:6]
data.frame转换为数字虚拟变量。
x
答案 1 :(得分:0)
我不是插科打字用户,但我认为你有两个问题。您使用的提取方法没有提供原子向量,而是包含向量的列表。如果您要求长度(y),则得到1而不是250.通过更改为y
的定义,可以轻松解决第一个错误:
y <- bank[[7]] # extract a vector rather than a sublist
然后事情变得混乱。 KNN方法期望连续数据(并且您获得的错误消息表明插入符号的作者认为它是“回归方法”并且您正在传递因子数据,因此您需要选择分类方法。