【发布时间】:2019-06-22 12:21:42
【问题描述】:
我正在对 R 进行 KNN 算法。我有三个数据集。我一直在处理我的代码,这就是我所拥有的:
library(stats)
library(class)
#load up train and testing files
train1<-read.table("train1.txt",header=FALSE)
test1<-read.table("test1.txt",header=FALSE)
#convert inputs into matrix
train = matrix(train1, byrow = T, ncol=3)
test = matrix(test1, byrow = T, ncol=3)
#load the classes in the training data
cl1a<-read.table("classes1.txt",header = FALSE)
clas=matrix(cl1a,byrow=T,ncol=1)
#set k
kk = 2
#run knn
kn1 = knn(train, test, clas, k=kk, prob=TRUE)
运行最后一行后,我收到错误消息:
knn(train, test, clas, k = kk, prob = TRUE) 中的错误: (list) 对象不能被强制输入'double'
我在其他地方读到,可以通过将表格转换为矩阵来解决此问题,但如您所见,我已在代码中修复了该问题。
感谢任何帮助!
【问题讨论】:
-
也许可以尝试使用数据框而不是矩阵。实在看不出有什么问题。
traceback()呼叫点在哪里? -
还有,为什么不用
as.matrix? -
使用回溯时我得到:
> traceback() 1: knn(train, test, clas, k = kk, prob = TRUE) -
谢谢!我使用 as.matrix 并且它有效。我知道,as.matrix 和 matrix 有什么区别?我把一个换成另一个,它起作用了。这是我的新代码:
[... ]#convert inputs into matrix train = as.matrix(train1, byrow = T, ncol=3) test = as.matrix(test1, byrow = T, ncol=3) #load the classes in the training data cl1a<-read.table("classes1.txt",header = FALSE) clas=as.matrix(cl1a,byrow=T,ncol=1) #set k kk = 1 #run knn kn1 = knn(train, test, clas, k=kk, prob=TRUE) -
as.matrix为您进行必要的转换,而不会删除任何值。这只是一个答案,您可以通过?matrix和?as.matrix了解更多信息。
标签: r