生成一个循环语句来填充vector



我已经尝试了一些方法来解决这个问题,但我对如何写它有麻烦。我想前三步我做对了,但是现在我要用y中的数字填充向量z这些数字可以被4整除,不能被3整除,并且是奇数位。我知道我以错误的方式使用print函数,我只是不知道还能使用什么……这和另一个问题不同,因为我没有使用while循环。

#Step 1: Generate 1,000,000 random, uniformly distributed numbers between 0 
#and 1,000,000,000, and name as a vector x. With a seed of 1.
set.seed(1)
x=runif(1000000, min=0, max=1000000000)
#Step 2: Generate a rounded version of x with the name y
y=round(x,digits=0)
#Step 3: Empty vector named z
z=vector("numeric",length=0)
#Step 4: Create for loop that populates z vector with the numbers from y that are divisible by
#4, not divisible by 3, with an odd number of digits. 
for(i in y) {
  if(i%%4==0 && i%%3!=0 && nchar(i,type="chars",allowNA=FALSE,keepNA=NA)%%2!=0){
    print(z,i)
  }
}

注意:根据@BenBolker的评论,循环是解决问题的低效方法。一般来说,在R中,尽可能避免循环以最大化代码的效率。@SymbolixAU在评论中提供了一个这样做的例子。话虽如此,为了帮助您了解循环和向量的来龙去脉,这里有一个解决方案,只需要更改一行代码:

你已经在循环之前创建了向量,这是一个很好的开始。现在,在循环中,你需要填充那个向量。要做到这一点,你现在有print(z,i),它不会做太多。改变vector本身需要做的:

z <- c( z, i )

应该为您工作(只需替换循环中的print行)。

这里发生的事情是,我们将现有的z向量,将i绑定到它的末端,并再次生成新的向量z。所以每增加一个值,向量就会变长一点,这样你就会得到一个完整的向量。

print替换为:

z <- append(z, i)

最新更新