R语言for循环变量赋值问题?

尝试编写一个朴素贝叶斯的程序,数据形式类似于这样,其中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函数吗,如果不行的话,那有什么实现这种分类统计的好方法吗?
请赐教,谢谢!