[问题] ||的用法

楼主: 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