尝试编写一个朴素贝叶斯的程序,数据形式类似于这样,其中x1,x2是特征,y是分类
现在想输出基于x的各个特征的不同取值(如x1:1,2,3)与y的分类(-1,1)匹配出的这样六对数据对中,每一对的数据(如x1=1,y=-1)的数据有多少条,为此写了一个for循环如下
for(i in 1:ncol.tr-1){
uniq.x<-unlist(unique(traindata[,i]))#第i个特征所有的取值类别
n.x<-length(unique(traindata[,i]))#数出第i个特征有几种可能的取值
for(j in 1:nrow(traindata)){
for(s in 1:n.x){
for(t in 1:n.y){#遍历xi,y的s,t个不同取值
print(uniq.x[s])
print(uniq.y[t])
if(traindata[j,i]==uniq.x[s]&traindata[j,ncol.tr]==uniq.y[t])
u[n.y*(s-1)+t]<-u[n.y*(s-1)+t]+1
}
}
}
}
运行报错,
Error in if (traindata[j, i] == uniq.x[s] & traindata[j, ncol.tr] == uniq.y[t]) u[n.y * :
argument is of length zero
加入代码
print(uniq.x)
之后,发现输出的是NULL
尝试只在循环里放uniq.x
for(i in 1:ncol.tr-1){
uniq.x<-unlist(unique(traindata[,i]))
print(uniq.x)}
输出如下
NULL
[1] 1 2 3
[1] "S" "M" "L"
不懂为什么第一个循环中是空值,第二个循环却可以,另外第二个循环输出中,最上面的NULL意味着什么呢?
是不能再循环中这样使用unique函数吗,如果不行的话,那有什么实现这种分类统计的好方法吗?
请赐教,谢谢!