R编程:如果向量中的所有必需值都已从样本中复制,如何基于while循环条件进行设置?

R编程:如果向量中的所有必需值都已从样本中复制,如何基于while循环条件进行设置?,r,if-statement,while-loop,R,If Statement,While Loop,我是R新手,我正在尝试看看需要多少次迭代才能使用runif从随机样本中用数字1到55(无重复)填充向量 目前,向量中有很多重复项,我返回的迭代次数就是向量的大小。所以,我不确定我的逻辑是否正确。 if语句的目的是检查向量中是否存在样本中的值,如果存在,则选择下一个。但我不确定它是否正确,因为下一个数字可能已经存在于向量中。任何帮助都将不胜感激 numbers=as.integer(runif(800, min=1, max=55)) ## my sample from runif i=sampl

我是R新手,我正在尝试看看需要多少次迭代才能使用runif从随机样本中用数字1到55(无重复)填充向量

目前,向量中有很多重复项,我返回的迭代次数就是向量的大小。所以,我不确定我的逻辑是否正确。 if语句的目的是检查向量中是否存在样本中的值,如果存在,则选择下一个。但我不确定它是否正确,因为下一个数字可能已经存在于向量中。任何帮助都将不胜感激

numbers=as.integer(runif(800, min=1, max=55)) ## my sample from runif
i=sample(numbers, 1) 

## setting up my vector to store 55 unique values (1 to 55)
p=rep(0,55)

## my counters
j=0
n=1

## my while loop
while (p[n] %in% 0){
## if the sample value already exists in the vector, choose the next value from the sample
if (numbers[n] %in% p) {
p[n]=numbers[n+1] 
}
else {
p[n] = numbers[n] 
}
    n = n + 1
    j = j + 1
}

我相信以下是你想要的。相反,在
p
上执行
while
循环时,
while
循环应在
数字中搜索新值

set.seed(2021)    # make the results reproducible
numbers <- sample(55, 800, TRUE)
## setting up my vector to store 55 unique values (1 to 55)
p <- integer(55)

# assign the elemnts of p one by one
for(j in seq_along(p)){
  ## if the sample value already exists in the vector, 
  ## choose the next value from the sample
  n <- 1
  while (numbers[n] %in% p) {
    n <- n + 1
  }
  if(n <= length(numbers)){
    p[j] <- numbers[n]
  }
}

j
#[1] 55
length(unique(p)) == length(p)
#[1] TRUE
set.seed(2021)#使结果重现

数字
p
现在是一个零向量。你的意思是
1:55
而不是
rep(0,55)
?我的目标是创建一个包含55个空格的空向量,以便我可以使用它作为while循环条件。如果我将其设置为rep(1,55)会更好吗?这有区别吗?谢谢你。然而,目前,填充向量所需的迭代次数是向量本身的大小。我需要看看我应该画多少次随机数(来自随机均匀分布)来填充一个值为1到55的向量。如果我想在模拟800次的随机均匀分布中得到填充向量所需的迭代次数,你建议我怎么做?