R语言KNN算法运行报train与class长度不同错误求解
问题原因
你使用的是tibble格式数据集,用training[,3]取列时,默认返回单列表格而非knn()要求的一维向量。单列表格的length()返回值为列数1,和训练集26026行的长度不匹配,因此触发报错。
解决方案
调整cl参数的取值方式,传入一维向量即可,以下三种写法都可解决问题:
- 用
$直接提取列向量
y_pred <- knn(train = training[, -3], test = testing[, -3], cl = training$euRefVoteAfter, k = 3, prob = FALSE)
- 用
drop=TRUE强制将单列表格转为向量
y_pred <- knn(train = training[, -3], test = testing[, -3], cl = training[,3, drop=TRUE], k = 3, prob = FALSE)
- 用dplyr的
pull()函数提取列向量
library(dplyr) y_pred <- knn(train = training[, -3], test = testing[, -3], cl = pull(training, euRefVoteAfter), k = 3, prob = FALSE)
验证方法
修改参数前可运行命令确认类型:
class(training[,3])返回值为tbl_df/tbl/data.frame,length(training[,3])返回值为1class(training$euRefVoteAfter)返回值为向量类型,length(training$euRefVoteAfter)返回值为26026,符合knn()的参数要求
内容的提问来源于stack exchange,提问作者lata
相关产品推荐
相关产品推荐

