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