我的代码又遇到了麻烦。这是问题,我现在有什么:
# 2. Draw a random sample of size n=20 from a uniform distribution in 0 and 1 using
# runif(20). Sequentially, print values using the following rules:
# i. Print a value if it is less than 0.3 or more than 0.8, but skip it
# (don’t print the value) if it is in (0.1, 0.2],
# ii. Skip the entire process if you find a value in [0.4,0.5].
# Write three separate R codes using (a) for loop, (b) while loop
# and (c) repeat loop.
# (a) for loop
n = runif(20)
for (val in n){
if (val > 0.1 & val <= 0.2){
next
} else if (val < 0.3 | val > 0.8){
print(val)
} else if (val >= 0.4 & val <= 0.5){
print(val)
break
}
}
# (b) while loop
n = 1
m = runif(20)
while(n < 20){
if (m > 0.1 & m <= 0.2){
next
} else if (m < 0.3 | m > 0.8){
print(m)
} else if (m >= 0.4 & m <= 0.5){
print(m)
break
}
n = n + 1
}
# (c) repeat loop
n = 1
m = runif(20)
repeat{
if (m > 0.1 & m <= 0.2){
next
} else if (m < 0.3 | m > 0.8){
print(val)
} else if (m >= 0.4 & m <= 0.5){
print(m)
break
}
}
循环部分(a)完美运作。
我唯一的问题是(b)while循环和(c)重复循环。他没有在课堂上做得很好,也没有做过一段时间的循环和重复循环。请帮忙。
答案 0 :(得分:1)
您创建的对象m
的长度为20,因此当您使用if (m > 0.1 & m <= 0.2)
之类的内容进行测试时,R只测试对象中的第一项。要解决此问题,您需要使用m
(循环计数器)对n
进行索引。换句话说,不要在测试中使用m
,而是使用m[n]
。总而言之,它应该是这样的:
n <- 1
m <- runif(20)
while(n < 20){
if (m[n] > 0.1 & m[n] <= 0.2){
next
} else if (m[n] < 0.3 | m[n] > 0.8){
print(m[n])
} else if (m[n] >= 0.4 & m[n] <= 0.5){
print(m[n])
break
}
n <- n + 1
}
您应该能够对c部分使用类似的方法。 (另请注意,在c部分中,您一度只有print(val)
。)
希望有所帮助!
答案 1 :(得分:1)
显然是练习,如果你要解决它,但好的,我会发布一个解决方案。
# (b) while loop
n = 1
m = runif(20)
while(n <= 20){
if (m[n] > 0.1 & m[n] <= 0.2){
n = n + 1
next
} else if (m[n] < 0.3 | m[n] > 0.8){
print(m[n])
} else if (m[n] >= 0.4 & m[n] <= 0.5){
print(m[n])
break
}
n = n + 1
}
# (c) repeat loop
n = 0
m = runif(20)
repeat{
if(n < 20)
n <- n + 1
else
break
if (m[n] > 0.1 & m[n] <= 0.2){
next
} else if (m[n] < 0.3 | m[n] > 0.8){
print(m[n])
} else if (m[n] >= 0.4 & m[n] <= 0.5){
print(m[n])
break
}
}
作为最后一点,每当使用伪随机数生成器时,您应该设置初始值,以便结果可重现。这是这样做的:
set.seed(6019) # or any other value, 6019 is the seed
这是在首次调用runif
之前。