2014-07-08 3 views
1

다음과 같이 작성된 알고리즘이 있지만 해당 코드를 R에 작성해야합니다. 알고리즘과 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)) 
+1

원래 코드가 Fortran 77 Fortran보다 우선입니까? Fortran에 IF, ELSE, END IF가 있기 전에? – paisanco

+0

원래 작성된 코드는 확실하지 않지만 확장자는 * .bas입니다. 어떤 프로그램이 사용되었는지 확실하지 않습니다. –

+0

BASIC의 오래된 구식. 나는 GOTO의 예전 인스턴스를 ifelse에 매핑하는 것이 옳은 길에 있다고 생각합니다. – paisanco

답변

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

쓴 R 코드는이 다음과 같다 이미 필요한 경우 (실제로 필요한 경우) 또는 이미 작성한 if/ifelse 구문에 추가 또는 보조 기능을 추가하십시오.

,515,

a) 전체 코드() 심각한 에러 또는 문제가 해결되면 : 루프 내에서 if (condition) stop("explain why...") 또는 stopifnot(condition)

B) 기능을 정지 if (condition) return() : 함수 내에서) nextbreak

C 참조 여기

+0

)는 오류가 발생합니다. 오류없이 올바른 프로그램을 종료하는 데 사용할 수 없습니다. –