[問題] ||的用法

作者: oldjojotenya (舊舅舅)   2014-10-25 21:19:19
[問題類型]:
程式諮詢
[軟體熟悉度]:
新手,用coursera自己亂學
[問題敘述]:
以下是我寫的程式碼:
outcome <- "heart attack"
if(outcome != "heart failure" || outcome != "heart attack" ||
outcome != "pnuemonia"){
stop("invalid outcome")
}
結果跑出以下警告:
錯誤: invalid outcome
我有兩個問題想請教版上大大:
問題一、為何我賦值給outcome的內容明明是不符if內條件的,但最後還是執行了stop()?
問題二、查了一下||只能用於raw或logical或‘number-like’ vectors,所以我就不能
把程式寫成 if(outcome != "heart failure" || "heart attack" || "pnuemonia),
請問有沒有更簡潔的方式表達我的outcome不能等於"heart failure"、"heart attack"
或"pnuemonia"這三個character其中之一的方法?
謝謝^^
作者: Edster (Edster)   2014-10-25 23:24:00
outcome %in% c(heart failure, heart attack, ...)看你的 outcome 只有一個值. 若是有很多個就反過來寫..
作者: obarisk (OSWALT)   2014-10-25 23:51:00
if內第一個表達式為真
作者: oldjojotenya (舊舅舅)   2014-10-26 19:35:00
謝謝E大我成功了!謝謝o大,已理解
作者: andrew43 (討厭有好心推文後刪文者)   2014-10-26 19:49:00
a <- 1 ; !(a == 2 | a == 3 | a == 4) 為所求我猜你要的寫法是這個。不過Edster的寫法更好懂。
作者: oldjojotenya (舊舅舅)   2014-10-27 00:43:00
原來是把!放在外面,剛試過可以了,謝謝a大!
作者: gsuper (Logit(odds))   2014-11-03 20:13:00
盡量不要用 == 或 != , 因為對 NA 會有問題改用 %in% , all() , any() 這些比較好用還有就是你的 || 寫法沒問題, 是因為三者中任一項為 TRUE其結果就是 TRUE你的第一和第三判斷式為 TRUEall(!outcome%in%c('heart failure','heart attack','pnuemonia'))寫不對了 all 去掉
作者: oldjojotenya (舊舅舅)   2014-11-18 16:52:00
回來溫習才發現g大實用的回答,琢磨中^^謝謝!

Links booklink

Contact Us: admin [ a t ] ucptt.com