R语言for循环嵌套if语句选取向量元素出现长度警告问题
错误原因
- 核心错误是for循环的遍历对象错误:你写的
for (i in differenza)是直接遍历differenza向量的元素数值,而非元素的下标索引。当你后续调用abs(differenza[i])时,相当于用小数/负数数值作为向量索引:正小数会被R自动向下取整,负数索引会返回原向量去掉对应位置后的所有元素,0值索引会返回空向量,最终abs(differenza[i])得到的结果往往长度不为1,而if判断只能接收长度为1的逻辑值,因此触发了你收到的警告。 - 次要错误是输出语句逻辑错误:
cat("Componente", i > 0.001, "\n")中的i > 0.001会返回逻辑值TRUE/FALSE,并非你想要输出的分量序号或分量数值。
修正代码
你只需要把for循环改成遍历下标即可,修正后的完整代码如下:
lambda = 10 n = 10 p = lambda/n K = 10 x = 0:K denbinom = dbinom(x, n, p) denpois = dpois(x, lambda) differenza = denbinom - denpois # 改用seq_along遍历向量下标 for (i in seq_along(differenza)) { diff_val <- abs(differenza[i]) if (diff_val > 0.001) { cat("Componente", i, "差值大于0.001,差值为", differenza[i], "\n") } else { cat("Componente", i, "ok\n") } }
内容的提问来源于stack exchange,提问作者Gennaro Arguzzi
相关产品推荐
相关产品推荐

