菩提用来遗忘 2020-10-14 19:42
浏览 1070

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函数吗,如果不行的话,那有什么实现这种分类统计的好方法吗?
请赐教,谢谢!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥30 这是哪个作者做的宝宝起名网站
    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!