大家好,我在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这就是我想要实现的目标.
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的出现来改变样本.你应该使用if
而else
不是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 }