提问人:fredi96 提问时间:4/6/2023 更新时间:4/6/2023 访问量:35
在 R 中正确存储 while 循环结果
Properly store while loop result in 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)
}
}
重点是存储 .使用我可以正确地看到我的结果(它应该是一个向量),但是当我使用 R 时,我只给了我迭代的第一个元素。如何获得正确的输出?它应该是一个向量,包含来自迭代的所有元素。err
print
return
KBK公司不要关注条件,它只是一个代理,真正的代理是另一个,但我检查了一下,那里没有问题。此外,我构建了一个 if 语句,因为 while 循环的条件非常罕见,并且可能永远不会发生,并且会永远迭代。
答:
1赞
DaveArmstrong
4/6/2023
#1
该函数将结果发送到控制台,但不会以任何其他方式保存它。您需要结合评论中建议的内容。您需要不断添加到每个迭代中,然后在函数结束时返回它。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 使用 reprex v2.0.2
0赞
Merijn van Tilborg
4/6/2023
#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
上一个:While 循环未遵守条件
评论
err <- c(err, N[i]/(R[i]+P[I]))
err
else
err <- N[i]/(R[i]+P[i])
return(err)
err <- N[i]/(R[i]+P[I])