在R中没有for循环

时间:2013-08-29 07:44:10

标签: r

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

我想将此向量放入函数qnorm

qnorm(vec , 0, 1)

但是,vec中的0和1可能会导致qnorm生成-infinf。现在,我想首先处理向量vec,然后将向量放在qnorm函数中。但是,我想避免使用for循环和哪个函数。有更优雅的解决方案吗?

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  }
}

1 个答案:

答案 0 :(得分: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