背景
我在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.
答案 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