R 当达到某个结果时终止的循环

R 当达到某个结果时终止的循环,r,R,我正在尝试从0到36的序列中进行采样。但是如果对0进行采样,我希望循环终止。这是我到目前为止所做的,但它不起作用 x <- seq ( 0, 36, by=1 ) for ( i in 1:100) { x<- sample (x, 1, replace = F, prob=NULL) if (x[i] == 0){ break } print("x[i]") } x您必须将采样过程的所有结果存储在一个向量中。你可以这样做: set.seed(12345)

我正在尝试从0到36的序列中进行采样。但是如果对0进行采样,我希望循环终止。这是我到目前为止所做的,但它不起作用

x <- seq ( 0, 36, by=1 )
for ( i in 1:100) {
x<- sample (x, 1, replace = F, prob=NULL)
if (x[i] == 0){
break
}
print("x[i]")
}

x您必须将采样过程的所有结果存储在一个向量中。你可以这样做:

set.seed(12345)                 # Set seed to make results reproducible. 
                                # Change the seed for different random numbers
x <- seq(0, 36, by = 1)
y <- sample(x, 1)               # Initialize vector of sampling results
while (tail(y, 1) != 0){
    y <- c(y, sample(x, 1))     # Append results to vector  
}
> y
#  [1] 26 32 28 32 16  6 12 18 26 36  1  5 27  0
set.seed(12345)#设置seed以使结果可重复。
#更改不同随机数的种子

x您必须将采样过程的所有结果存储在一个向量中。你可以这样做:

set.seed(12345)                 # Set seed to make results reproducible. 
                                # Change the seed for different random numbers
x <- seq(0, 36, by = 1)
y <- sample(x, 1)               # Initialize vector of sampling results
while (tail(y, 1) != 0){
    y <- c(y, sample(x, 1))     # Append results to vector  
}
> y
#  [1] 26 32 28 32 16  6 12 18 26 36  1  5 27  0
set.seed(12345)#设置seed以使结果可重复。
#更改不同随机数的种子

我只是稍微调整一下你的代码。只需使用另一个变量进行存储

x <- seq ( 0, 36, by=1 )
y <- c()
for ( i in 1:100) {
    y[i]<- sample (x, 1, replace = F, prob=NULL)
    if (y[i] == 0){
       break
     }
print(y[i])
}

x我只是稍微调整一下你的代码。只需使用另一个变量进行存储

x <- seq ( 0, 36, by=1 )
y <- c()
for ( i in 1:100) {
    y[i]<- sample (x, 1, replace = F, prob=NULL)
    if (y[i] == 0){
       break
     }
print(y[i])
}

x嗨,我不明白嗨,我不明白如果N变大,增加一个对象可能对性能有害。@RomanLuštrik这是真的。由于试验次数没有自然上限(理论上,在采样0之前可能需要任何数量的试验),因此您必须自己设置上限(“我只对需要x次或更少试验的运行感兴趣”)并事先初始化向量y。你可以这么做。如果您将最大大小设置得足够高,您可能不会有任何问题,或者预先分配一个向量并根据需要进行扩展。如果我没记错的话,帕特里克·伯恩斯(Patrick Burns)中讨论了这一点。如果N变大,则增长对象可能会对性能有害。@RomanLuštrik这是真的。由于试验次数没有自然上限(理论上,在采样0之前可能需要任何数量的试验),因此您必须自己设置上限(“我只对需要x次或更少试验的运行感兴趣”)并事先初始化向量y。你可以这么做。如果您将最大大小设置得足够高,您可能不会有任何问题,或者预先分配一个向量并根据需要进行扩展。如果我没记错的话,帕特里克·伯恩斯(Patrick Burns)对此进行了讨论。