如果声明+在R中停止

时间:2017-03-31 03:08:23

标签: r function if-statement

背景

我在R函数中有两个元素,名为 GG (请参阅下面的我的R代码),类型宽度类型元素只能使用以下字符参数:" 普通"或" 柯西"。当type是"柯西" width可以是任意数字,也可以是以下3个字之一:" 中等"," & #34;,或" 非常宽"。但是,当type为" 正常"时,wide 必须只是一个数字

问题:

首先,当我运行GG(type = "normal", width = "medium")时,该功能应该停止并返回一条消息,但是我收到错误,我该如何解决?

其次,这些if语句能否更有效地编写?

GG = function(type, width){


width <- if(type == "cauchy" & width == "wide") { sqrt(2)/2 } else

if(type == "cauchy" & width == "medium") { 1/2 } else 
  if(type == "cauchy" & width == "very wide") { 1 } else 
    if(type == "normal" & is.character(width) ) {
      stop(message(cat("You must provide a number")))
    } else { width }

return(width)

}

GG(type = "normal", width = "medium") ## if you I run this, I get an error.

1 个答案:

答案 0 :(得分:2)

根据定义,stop是一条错误消息

  

停止执行当前表达式并执行错误操作。

所以毫不奇怪这是一个错误,但它正在做你想要的,即停止并返回一条消息。

42的建议可能意味着以下几点:

GG2 <- function(type, width) {

  width_vals <- list(
    "wide" = sqrt(2)/2,
    "medium" = 1/2,
    "very wide" = 1
  )

  if (type == "normal" & is.character(width)) {
    stop("You must provide a number")
  } else if (type == "cauchy") {
      width <- width_vals[[width]]
  }
  return(width)
}


GG2(type = "normal", width = 2) # 2
GG2(type = "normal", width = "wide") # error
GG2(type = "cauchy", width = "wide") # 0.7071068
GG2(type = "cauchy", width = "medium") # 0.5
GG2(type = "cauchy", width = "very wide") # 1