如何用R语言的for控制结构实现向量元素整除判断函数?
用for循环实现向量元素整除判断的方法
嘿,先帮你揪出原来while函数里的两个小问题,再一步步教你用for循环实现:
- 逻辑搞反了:你要判断的是「向量里的元素能不能被n整除」,应该是
元素 %% n == 0,而不是n %% v == 0(后者是判断n能不能被向量里的元素整除); - while循环的条件问题:
n %% v == 0会返回一个和v长度一样的逻辑向量,但while只能接受单个TRUE/FALSE,运行时会报错哦。
用for循环的实现思路
我们要逐个遍历向量里的每个元素,检查它是否能被n整除:
- 找到第一个符合条件的元素,立刻返回
TRUE并终止函数; - 如果遍历完所有元素都没找到,就返回
FALSE。
对应的代码如下:
function.for <- function(v, n) { # 遍历向量v中的每一个元素,把当前元素赋值给element变量 for (element in v) { # 检查当前元素除以n的余数是否为0 if (element %% n == 0) { # 找到符合条件的元素,直接返回TRUE,函数立刻结束 return(TRUE) } } # 循环走完所有元素都没找到符合条件的,返回FALSE return(FALSE) }
测试一下效果
你可以用这些例子验证:
# 存在能被3整除的元素(3),返回TRUE function.for(c(2, 3, 5), 3) # 没有能被5整除的元素,返回FALSE function.for(c(2, 4, 6), 5)
额外小技巧(R风格写法)
其实R是向量化语言,不用循环也能一行搞定:
function.vectorized <- function(v, n) { any(v %% n == 0) }
v %% n == 0会生成一个逻辑向量,any()函数只要其中有一个TRUE就返回TRUE,和我们的循环逻辑完全一致~
内容的提问来源于stack exchange,提问作者Jusep
相关产品推荐
相关产品推荐

