能否在for循环中跳过指定索引值?可使用seq()函数实现吗?
解决方法:用
seq()配合集合运算跳过指定值 当然可以用seq()来实现需求,结合集合运算就能轻松跳过2、4、6、8这些会导致分母为0的数值。下面给你两种可行的写法:
方法一:生成完整序列后排除目标值
先用seq(1, 10)生成1到10的完整序列,再用setdiff()函数剔除seq(2, 8, by = 2)生成的2、4、6、8:
my_func <- function(x) { a <- 1/((x-2)*(x-4)*(x-6)*(x-8)) print(a) } # 跳过2、4、6、8的循环 for (i in setdiff(seq(1, 10), seq(2, 8, by = 2))) { my_func(i) }
这段代码里,setdiff()会返回两个序列的差集,也就是c(1,3,5,7,9,10),刚好避开了会报错的数值。
方法二:直接生成目标序列
如果不想做排除操作,也可以直接用seq()生成需要的奇数序列,再补充上10:
for (i in c(seq(1, 9, by = 2), 10)) { my_func(i) }
这样循环的i值直接就是1,3,5,7,9,10,同样能达到跳过指定值的效果。
内容的提问来源于stack exchange,提问作者MetehanGungor
相关产品推荐
相关产品推荐

