看板 R_Language 關於我們 聯絡資訊
[問題類型]: 程式諮詢 [軟體熟悉度]: 新手,用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其中之一的方法? 謝謝^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.73.53.206 ※ 文章網址: http://www.ptt.cc/bbs/R_Language/M.1414243161.A.1CE.html ※ 編輯: oldjojotenya (110.73.53.206), 10/25/2014 21:20:14 ※ 編輯: oldjojotenya (110.73.53.206), 10/25/2014 21:21:02 ※ 編輯: oldjojotenya (110.73.53.206), 10/25/2014 21:22:12
Edster: outcome %in% c(heart failure, heart attack, ...) 10/25 23:24
Edster: 看你的 outcome 只有一個值. 若是有很多個就反過來寫.. 10/25 23:26
obarisk: if內第一個表達式為真 10/25 23:51
oldjojotenya: 謝謝E大我成功了! 10/26 19:35
oldjojotenya: 謝謝o大,已理解 10/26 19:37
andrew43: a <- 1 ; !(a == 2 | a == 3 | a == 4) 為所求 10/26 19:49
andrew43: 我猜你要的寫法是這個。不過Edster的寫法更好懂。 10/26 19:50
oldjojotenya: 原來是把!放在外面,剛試過可以了,謝謝a大! 10/27 00:43
gsuper: 盡量不要用 == 或 != , 因為對 NA 會有問題 11/03 20:13
gsuper: 改用 %in% , all() , any() 這些比較好用 11/03 20:14
gsuper: 還有就是你的 || 寫法沒問題, 是因為三者中任一項為 TRUE 11/03 20:15
gsuper: 其結果就是 TRUE 11/03 20:16
gsuper: 你的第一和第三判斷式為 TRUE 11/03 20:16
gsuper: all(!outcome%in%c('heart failure','heart attack', 11/03 20:18
gsuper: 'pnuemonia')) 11/03 20:18
gsuper: 寫不對了 all 去掉 11/03 20:19
oldjojotenya: 回來溫習才發現g大實用的回答,琢磨中^^謝謝! 11/18 16:52