在R中使用多个if else函数时出错

时间:2014-11-17 17:06:04

标签: r function loops if-statement

我对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 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)
}
}
}
} 

得到错误:意外&#39;}&#39;在&#34;}&#34;

2 个答案:

答案 0 :(得分: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 :(得分:1)

你有两个主要问题。

  1. 您没有正确使用else if
  2. ===不同。
  3. 其他需要改进的地方(甚至在必须使用ifelse的范围内)是你的功能不是很干。你有四个print,而一个就足够了。此外,缩进有助于提高可读性。


    这是一个让你入门的虚拟功能。您显然知道如何定义函数并打印它们,因此您可以从那里进行替换:

    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("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("rat", 3)
    # Error in calCS("rat", 3) : Your method is not supported
    

    我将保留toupper的集成以及任何其他错误检查,因为这与if else无关。