在R中的for循环中增加计数器

 多米音乐_34084632 发布于 2023-02-13 16:39
  • php
  • 大家好,我在for循环中创建的计数器有问题.这是代码.

    n1<- 0
    n2<- 0
    n<- 20
    f<- rep(NA,20)
    set.seed(10) 
    x<- runif(20)
    for(i in 1:20) {
    f[i]<- ifelse(x[i]<0.5, 'a', 'b')
    if((n1-n2)==2) {
    break
     }
     if(f[i]=='a')  
    n1<- n1 + 1 else n2<- n2 + 1 # n1 counts a's n2 counts b's
    }
    
    [1] "b" "a" "a" "b" "a" "a" "a" NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
    

    正如你可以从a的结果数看到= 5而b = 2.但是当我调用n1和n2时,它返回4表示n1,这是错误的.这是为什么?我怎么了?提前致谢 .

    我开始以0.5 .20的概率对a和b进行采样.在某些我事先不知道的地方,a的数量 - b的数量超过2.当发生这种情况时,我希望采样概率变为0.2这就是我想要实现的目标.

    1 个回答
    • ifelse是矢量化所以不需要在for-loop这里使用.这个你应该如何使用它:

      set.seed(10) 
      x <- runif(20)
      f <- ifelse(x<0.5, 'a', 'b')
      

      然后table用于计算出现次数:

      table(f)
      f
       a  b 
      13  7 
      

      得到n1:

      n1 <- table(f)[['a']]
      

      EDIT OP想要根据a和b的出现来改变样本.你应该使用ifelse不是ifelse.您还应该为矢量f预分配内存.

      n1 <- 0 ; n2 <- 0
      N <- 20
      f <- vector(mode='character',N)
      set.seed(10)
      x<- runif(N)
      for(i in seq(N)) {
           if (x[i] <0.5){ 
              f[i] <- 'a'
              n1 <- n1 +1
           } else {
              f[i] <- 'b'
              n2 <- n2 +1
           }
          if((n1-n2)==2) x <- runif(N)  ## condition to regenerate sample
      }
      

      2023-02-13 16:41 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有