2013-08-29 47 views
0

我有一個載體,其可有時包含0和1如果沒有對中的R

欲需要把這個載體導入功能qnorm

qnorm(vec , 0, 1) 

然而循環中,0和1 s在vec可能導致qnorm產生-infinf。現在下面的for循環是我想要做的第一個處理矢量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 } 
} 
+0

您現在已經真正混爲一談零1e-50值,真正的1-1e-50值。你不能獨自離開無限嗎? – Spacedman

回答

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 
+0

你是否回答考慮到這種情況,如果'vec [i] == 1',那麼做'vec [i] < - vec [i] - 1e-50'?如果我在其中看到0和1秒,我只想修改向量。 – mynameisJEFF

+0

@Chinegro:不,對不起,我沒有仔細閱讀你的問題。請參閱我的編輯。 – sgibb

+0

你也可以使用'pmin'和'pmax' – hadley