2014-11-17 4 views
1

저는 r이 비교적 새롭기 때문에 다음 작업을 수행하는 calCS 함수를 작성하고 싶습니다. 원의 면적 계산 (AC = pi * r^2) (CC = 2 * pi * r), 구의 체적 (VS = (4/3) pi r3 또는 구의 면적 (AS = 4 * pi * r^2) 첫 번째 인수는 AC, CC, VS 또는 AS 중 하나이며 수행 할 계산은 입니다. 첫 번째 인수에 사용되는 값에는 대문자, 소문자 또는 대소 문자가 모두 포함될 수 있습니다. (toupper 함수 사용) 인수의 값이 AC, CC, VS 또는 AS가 아닌 경우 함수를 중지하고 쓰기 메서드가 지원되지 않습니다. . 두 번째 인수는 반경 (r)입니다. 이 문제에 대해 if ... else 문을 사용해야합니다. 나는 여러 개의 if 문을 사용하려고 시도했지만 반복적으로 괄호와 관련된 오류가 발생했습니다.여러 개의 if else 함수를 사용하는 중 오류가 발생했습니다.

calCS <- function(x,r){ 
if(x="AC"){ 
a <- pi*r^2 
print(a) 
} 
} else { 
    if(x="CC"){ 
b <- 2*pi*r 
    print(b) 
}else { 
    if(x = "VS"){ 
    c <- (4/3)*3.14*(r^3) 
    print(c) 
}else { 
    if(x = "AS"){ 
    d = 4*pi*(r^2) 
    print(d) 
} 
} 
} 
} 

오류를 가지고 : 예기치 않은 '}'에서 "}"

+0

'else if (x == ....)'를 사용해야합니다. 또한 이것은 '전환'에 대한 더 나은 후보자처럼 보입니다. – A5C1D2H2I1M1N2O1R2T1

+0

또한 숙제 문제처럼 의심스럽게 읽습니다. – A5C1D2H2I1M1N2O1R2T1

답변

1

당신은 두 가지 문제가있다.

  1. else if을 올바르게 사용하고 있지 않습니다.
  2. ===과 같지 않습니다. 개선을위한

다른 지역은 함수가 매우 건조되지 않는 것입니다 (심지어 ifelse을 사용할 필요의 범위 내에서 부착). 당신은 4 개의 print을 가지고 있고, 하나는 충분할 것입니다. 또한 들여 쓰기는 가독성에 많은 도움이됩니다.


다음은 시작하기 쉬운 기능입니다. 지원되지 않는 방법이 있다면,

calCS("AC", 3) 
# [1] "I am a cat with 3 toes" 
calCS("CC", 3) 
# [1] "I wish I had 3 toes" 
calCS("VS", 3) 
# [1] "I just counted 3 toes" 

을 그리고 : 당신은 분명히 그들을 당신의 기능을 정의하고 인쇄하는 방법을 알고, 그래서 당신은 거기에서 대체 할 수있는 : 행동 함수의

calCS <- function(x, r) { 
    if (!x %in% c("AC", "CC", "VS")) stop("Your method is not supported") 
    if (x == "AC") { 
    sprintf("I am a cat with %s toes", r) 
    } else if (x == "CC") { 
    sprintf("I wish I had %s toes", r) 
    } else if (x == "VS") { 
    sprintf("I just counted %s toes", r) 
    } 
} 

예 :

calCS("rat", 3) 
# Error in calCS("rat", 3) : Your method is not supported 

나는 toupper의 통합 및 기타 오류 C 떠날거야 그 이후로 당신을 위해서 열혈은 if else과 관련이 없습니다.

1

이 시도 :

calcCS <- function(x, r) { 
    print_and_return <- function(x) { print(x); x } 
    print_and_return(switch(x, AC = pi * r^2, CC = 2 * pi * r, 
          VS = (4/3)*3.14*(r^3), 4*pi*(r^2))) 
} 
+1

저에게'else else '처럼 보이지 않습니다. 숙제를 제대로 읽지 못했습니다 :-) – A5C1D2H2I1M1N2O1R2T1

+0

내가 원하는 것을 할 수 있습니다! –

+1

당신이 원하는 것을하고있는 동안 왜 'print_and_return'이라는 함수를 정의하고 싶습니까? 출력물을 콘솔에 두 번 출력하지 않겠습니까? – A5C1D2H2I1M1N2O1R2T1

관련 문제