R语言-while循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言-while循环相关的知识,希望对你有一定的参考价值。

参考技术A

for循环是通过变量或者向量控制循环。while循环是另一种循环,通过一个逻辑判定准则来控制循环。

while循环的语法为

例1 下面我们通过while循环来计算

运行程序

next语句用于跳出当前一轮的循环,执行下一轮循环。而break语句是跳出当前循环,不再执行下一轮循环。
例2 计算

在 R 中将函数与 while 循环集成

【中文标题】在 R 中将函数与 while 循环集成【英文标题】:Integration of a function with while loop in R 【发布时间】:2020-11-08 13:02:39 【问题描述】:

我想在 R 中集成一个涉及 while 循环的函数。我在这里粘贴了一个 MWE。谁能指导一下在集成此类功能时如何摆脱警告消息?

谢谢

myfun <- function(X, a, b, kmin, kmax)
  term <- 0
  k <- 1
  while(k < kmax | term < 10000)
    term <- term + a * b * X^k
    k <- k+1
  
  fx <- exp(X) * term
  return(fx)


a <- 5
b <- 4
kmax <- 20
integrate(myfun, lower = 0, upper = 10, a = a, b = b, kmax = kmax)

产生一个警告,通过warnings()访问:

In while (k < kmax | term < 10000)  ... :
  the condition has length > 1 and only the first element will be used

【问题讨论】:

请阅读***.com/editing-help。值得注意的是,代码围栏是三个反引号 (```),而不是三个单引号 (''')。 【参考方案1】:

来自integrate() 文档:

f 必须接受一个输入向量并在这些点生成一个函数评估向量。

这是问题的症结所在,您可以通过运行myfun(c(1, 2), a, b, kmin, kmax) 并重现类似警告来查看。发生的事情是integrate() 想要将输入向量传递给X 中的myfun;这意味着在您的while 循环内,term 也将成为一个向量。这会在while 循环回到评估阶段时产生问题,因为现在条件k &lt; kmax | term &lt; 10000 也具有向量结构(因为term 有),而while 不喜欢这种结构。

这个警告在这种情况下非常好,因为它强烈表明integrate() 没有做你想让它做的事情。您的目标不是消除警告消息;由于while 循环结构,所编写的函数根本不适用于integrate()

您可以选择 (1) 以不使用 while 循环的方式重写函数,或者 (2) 自己硬编码一些数字积分,可能使用 @987654337 @ 环形。使用 R 的最佳方式是将所有内容矢量化,并尽可能避免使用 whilefor 之类的内容。

最后,我会注意到底层函数似乎存在一些问题,因为myfun(0.5, a, b, kmin, kmax) 不会收敛(请注意,当提供的 X 项小于 1 时存在数学问题),所以你不会无论你做什么,都无法在区间 [0, 10] 上积分。

【讨论】:

亲爱的亚伦。你是绝对正确的。请问有什么可以替代while循环? 我们或许可以在不使用 while 循环的情况下重写该函数,但在我们这样做之前:该函数真的是您想要的吗?就像我之前提到的,X

以上是关于R语言-while循环的主要内容,如果未能解决你的问题,请参考以下文章

K&R C while 循环省略大括号

R中的并行while循环

请教C语言中while循环的问题,谢谢!

matlab 跳不出while循环

C语言 do while 和 while 循环

C语言关于while循环的问题