适当使用R中的go算法

时间:2014-07-08 03:55:46

标签: r goto

我有一个如下编写的算法,但我需要将该代码写入R.我已经包含了算法和R代码。我不确定这是否足够好。按顺序编写R代码并不简单。我很抱歉没有提供变量的所有值。我不确定输出,这是我无法显示所需的原因。这更像是一个理论问题。

算法

         VBDMAX = (va - VG) * 0.79 * (dep / D) ^ -1.21
         VBOWMAX = -0.7 * VBDMAX
         VBOWX = 0
         '  SKIP BOW IF -10D<X<15D OR OUTSIDE EDGE OF BARGES
         If Y > B / 2 Then GoTo 200
         If X < -10 * D Then GoTo 200
         If X >= 15 * D Then GoTo 200

         VBOWX = X * VBOWMAX / (10 * D) + VBOWMAX
         If X <= 0 Then GoTo 200

         VBOWX = X * (VBDMAX - VBOWMAX) / (5 * D) + VBOWMAX
         If X <= 5 * D Then GoTo 200
         VBOWX = -X * VBDMAX / (10 * D) + 15 * VBDMAX / 10
200      ' end bow

这是我编写的R代码

VBDMAX = (va - VG) * 0.79 * (dep / D) ^ -1.21
    VBOWMAX = -0.7 * VBDMAX
    VBOWX = 0
    #  SKIP BOW IF -10D<X<15D OR OUTSIDE EDGE OF BARGES

    VBOWX <- ifelse ((Y>B/2 | X < -10*D | X>=15*D), 0,X*VBOWMAX/(10*D)+VBOWMAX)

    VBOWX <- ifelse (X<=0 , X * (VBDMAX - VBOWMAX) / (5 * D) + VBOWMAX, 
                     ifelse(x <=5*D, -X * VBDMAX / (10 * D) + 15 * VBDMAX / 10))

2 个答案:

答案 0 :(得分:1)

将您的问题理解为如何翻译&#34;转到&#34;对R的陈述,除了(或通常更合适的)if / ifelse结构之外,还有以下可能性(如果确实需要的话):

a)整个代码(严重错误或问题解决后):if (condition) stop("explain why...")stopifnot(condition)

b)来自圈内:请参阅nextbreak

c)来自函数:if (condition) return(),停止此处的函数

答案 1 :(得分:1)

您可以使用ifelse构造,但您需要嵌套:

VBDMAX = (va - VG) * 0.79 * (dep / D) ^ -1.21
VBOWMAX = -0.7 * VBDMAX
VBOWX = 
    ifelse(Y > B / 2 || X < -10 * D || X >= 15 * D,
        0,
        ifelse(X <= 0,
            X * VBOWX / (10 * D) + VBOWMAX,
            ifelse(X <= 5 * D,
                X * (VBDMAX - VBOWMAX) / (5 * D) + VBOWMAX,
                -X * VBDMAX / (10 * D) + 15 * VBDMAX / 10
        )
      )
    )