正确存储while循环结果r



我有三个向量

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)
}
}

重点是存储err。使用print我可以正确地看到我的结果(这应该是一个向量),但是当我使用returnR只给我迭代的第一个元素。我怎样才能得到正确的输出?它应该是一个包含来自迭代的所有元素的向量。

NB。不要把注意力集中在条件上,它只是一个代理,真正的是另一个,但我检查了一下,没有问题。此外,我还构建了一个if语句,因为while循环的条件非常罕见,它可能永远不会发生,它会永远迭代。

print()函数将结果发送到控制台,但不以任何其他方式保存它。你需要结合评论中建议的内容。您需要在每次迭代中不断添加err,然后在函数结束时返回它。

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)

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 {
e <- N[i]/(R[i]+P[i])
err <- c(err, e)
i = i + 1
print(e)
}
}
return(err)
}
out <- tmp(N, R, P)
#> [1] 320.0598
#> [1] 321.5554
#> [1] 323.051
out
#> [1] 320.0598 321.5554 323.0510

创建于2023-04-06 with reprex v2.0.2

tmp <- function(N, R, P) {
s <- N + R + P
i <- which(s < 220)
(N[i] / (R[i] + P[i]))[-1]
}
tmp(N, R, P)
# [1] 320.06 321.56 323.05

相关内容

  • 没有找到相关文章

最新更新