在Caret中使用火车时,“nrow(x)== n不为TRUE”;已经设定为因素

时间:2016-03-11 15:36:58

标签: r r-caret

我正在使用此处找到的数据集: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在包中指的是什么。

2 个答案:

答案 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方法期望连续数据(并且您获得的错误消息表明插入符号的作者认为它是“回归方法”并且您正在传递因子数据,因此您需要选择分类方法。