if ... else语句运行代码的两个部分

时间:2017-07-23 18:31:59

标签: r

我需要我的代码检查向量以查看是否有任何值为负数,如果有一个或多个值则返回错误。如果没有一个是负数,我需要它来找到值的几何平均值。问题是当有负值时我的代码同时给出了错误信息和几何平均值,我不想发生这种情况。

gm=function(x){
n=length(x)

    for(i in 1:n){
        if(x[i]<0){
            cat("ERROR: x value is negative")
            break
            }else{
            y=prod(x)^(1/n)
        }
    }
y
}
gm(x)

1 个答案:

答案 0 :(得分:4)

您应该避免循环遍历向量并检查条件。相反,您可以使用any检查条件的任何元素是否成立:

gm <- function(x) {
  if (any(x < 0)) {
    stop("x contains a negative element")
  } else {
    prod(x)^(1/length(x))
  }
}

你可以看到它的实际效果:

gm(c(4, 16))
# [1] 8
gm(c(-4, 16))
# Error in gm(c(-4, 16)) : x contains a negative element