0

我有一个向量,它有时可能包含 0 和 1。

我想需要将此向量放入函数 qnorm

qnorm(vec , 0, 1)

但是, 0 和 1vec可能会导致qnorm产生-infor inf。现在下面的for循环是我想要先处理向量vec,然后将向量放入qnorm函数中。但是,我想避免使用 for 循环和 which 函数。有没有更优雅的解决方案?

for(i in 1:length(vec)) {
    if(vec[i] == 0) {vec[i] <- vec[i] + 1e-50}
    else if(vec[i] == 1) {vec[i] <- vec[i] - 1e-50  }
}
4

1 回答 1

1

你可以使用ifelse

vec <- ifelse(vec == 0, vec + 1e-50, vec - 1e-50)

如果您的向量包含 0 和 1 以外的其他值,您可能需要使用:

vec[vec == 0] <- vec[vec == 0] + 1e-50
vec[vec == 1] <- vec[vec == 1] - 1e-50
于 2013-08-29T07:49:46.530 回答