假设我有一个数字列表。
x <- c(10,12,5,23,40,27,11,4,7,25,21,7,99,45,2,10)我想在for循环中使用if条件打印大于20的前5个数字,因为这是一个简单的可重现示例,而实际场景需要在for循环中使用if条件。有没有一种方法可以在不限制范围的情况下获得大于20的前5个数字?查找所有大于20的数字的方法如下所示
for(i in 1:length(x)){
if(x[i]>20){
print(x[i])
}
}这个问题也可以看作是将print语句限制在前5个实例中。有人能帮帮忙吗?请注意,不能将for循环的范围限制为达到解决方案。
必填答案为
23,40,27,25,21必须使用for循环、if条件和print语句/cat/writeLines
发布于 2021-06-22 18:11:09
这会起作用吗:
x[x > 20][1:5]
[1] 23 40 27 25 21使用for循环:
v <- vector()
for(i in 1:length(x)){
if(x[i] > 20){
v <- c(v,x[i])
}
if(length(v) == 5){
print(v)
break
}
}
[1] 23 40 27 25 21发布于 2021-06-22 18:12:35
事实证明,限制for循环的范围是允许的,这可以使用cumsum(x > 20) <= 5来完成
for(i in seq_len(match(5, cumsum(x > 20), length(x)))) {
if(x[i] > 20) {
print(x[i])
}
}
#[1] 23
#[1] 40
#[1] 27
#[1] 25
#[1] 21或者添加一个计数器:
Variant将在5次点击后中断(感谢@sindri-baldur):
n <- 0L
for(i in 1:length(x)){
if(x[i]>20) {
print(x[i])
n <- n+1L
if(n == 5L) break
}
}变种,这将使整个循环。
n <- 0L
for(i in 1:length(x)){
if(x[i]>20 & n<5) {
n <- n+1L
print(x[i])
}
}要获得前5个,可以使用head
head(x[x > 20], 5)
#[1] 23 40 27 25 21请注意,这也适用于命中次数少于5次的情况。然后,它将返回命中次数。例如,试着用:
x <- c(10,12,5,23,40,27,11,4,7,25,2,7,9,4,2,10)https://stackoverflow.com/questions/68081612
复制相似问题