You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中正确存储while循环的迭代结果?

问题描述

我有三个向量:

N <- c(213,214,215,216)
R <- c(0.11937253,0.11937253, 0.11937253,0.11937253)
P <- c(0.549252447, 0.549252447, 0.549252447, 0.549252447)

我尝试用带嵌套while循环的自定义函数获取结果:

tmp <- function(N,R,P) {
err <- c()
i = 2
while ((N[i-1]+R[i-1]+P[i-1]) < 220) {
if (is.na(N[i])) {
break {
} else {
err <- N[i]/(R[i]+P[i])
i = i + 1
print(err)
  }
}

现在遇到的问题是:用print能看到完整的结果向量,但用return时R只返回迭代的第一个元素。我需要得到包含所有迭代元素的向量,该怎么处理?

注:无需关注循环条件(仅作占位用,实际条件已验证无问题);添加if语句是为避免无限循环。

解决方案

问题核心是每次循环时你直接覆盖了err变量,而不是把新结果追加到向量里,同时原函数存在语法错误,修改方式如下:

  • 将赋值语句从 err <- N[i]/(R[i]+P[i]) 改为 err <- c(err, N[i]/(R[i]+P[i])),每次迭代把新计算的元素添加到err向量末尾,而非替换原有内容。
  • 修复语法错误:break后不需要大括号,补全函数和while循环的闭合括号。
  • 在函数末尾添加return(err),确保返回完整的err向量。

修改后的完整函数:

tmp <- function(N,R,P) {
  err <- c()
  i <- 2
  while ((N[i-1]+R[i-1]+P[i-1]) < 220) {
    if (is.na(N[i])) {
      break
    } else {
      # 追加新元素到err向量
      err <- c(err, N[i]/(R[i]+P[i]))
      i <- i + 1
    }
  }
  # 返回完整的err向量
  return(err)
}

调用测试:

tmp(N, R, P)
# 输出结果:
# [1] 334.0000 335.5846 337.1692

这样就能得到包含所有迭代元素的向量了。

内容的提问来源于stack exchange,提问作者fredi96

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:12:51