楼主: 梦孟小宝
4406 3

[问答] R if else 条件判断为缺失如何处理 [推广有奖]

  • 4关注
  • 1粉丝

硕士生

62%

还不是VIP/贵宾

-

威望
0
论坛币
10482 个
通用积分
14.0368
学术水平
10 点
热心指数
16 点
信用等级
8 点
经验
2574 点
帖子
78
精华
0
在线时间
216 小时
注册时间
2012-11-16
最后登录
2022-11-21

50论坛币
我写了段函数用于推荐药物,data为数据集,包含var1,var2两个变量,其中var1为药物种类(最多有3种),var2为对应的治疗有效率。因为药物1最经济,所以在药物1的治疗有效率可接受时,总是优先推荐药物1。这段程序在数据包含所有三种药物(即var1包含1、2、3)时可以运行。

但是有时数据只有两种或者一种药物的记录,这时候if else的条件判定就是缺失值,而非TRUE/FALSE,程序就运行不了。我想请教要如何处理这种情况?难道每次都要先判断var1是否包含1,var1是否包含2……?那样感觉条件套条件套条件,语句好复杂,我自己都会理不清。有没有高手能给点建议

我的另一悬赏提问,关于R自编函数中如何设置参数,也希望大家能多指导,谢谢!(https://bbs.pinggu.org/forum.php?mod=viewthread&tid=5279912&page=1&extra=)
  1. recommend2 <- function(data, var1, var2) {
  2.   #若药物1的治疗有效率大于0.9,则推荐药物1
  3.   if (var2[var1==1]>0.9) {
  4.     r <- 1
  5.   } else if (
  6.   #若药物1与药物2、药物3的治疗有效率差异不大(<20%),则推荐药物1
  7.                   max(abs(var2[var1==1]-var2[var1==2]/
  8.                      max(var2[var1==1],var2[var1==2])),
  9.                     abs(var2[var1==1]-var2[var1==2]/
  10.                     max(var2[var1==1],var2[var1==2]))) <0.2) {
  11.     r <- 1
  12.   } else if (
  13. #若药物1与药物2或药物3的治疗有效率差异大(>20%),则推荐治疗有效率高的药物
  14.             any(c(abs(var2[var1==1]-var2[var1==2]/
  15.                 max(var2[var1==1],var2[var1==2])),
  16.           abs(var2[var1==1]-var2[var1==2]/
  17.           max(var2[var1==1],var2[var1==2]))) >0.2)) {
  18.       r <- var1[which.max(var2)]
  19.   }
  20.   return(r)
  21. }
  22. a <- c(1,2,3)
  23. b <- c(0.6, 0.98, 0.95)
  24. df <- data.frame(a,b)
  25. c <- c(2,3)
  26. d <- c(0.86, 0.90)
  27. df2 <- data.frame(c,d)

  28. recommend(df,df$a,df$b) #当var1包含1、2、3时可以运行。df与a之间,df与b之间均有美元符号。
  29. recommend(df2, df$c, df$d) #当var1中没包含1时,无法运行。df与c之间,df与d之间均有美元符号。
复制代码

关键词:else LSE ELS Recommend commend 如何
沙发
cheetahfly 在职认证  发表于 2017-2-15 17:48:57 |只看作者 |坛友微信交流群
if else问题的相关代码是?

使用道具

藤椅
zerofung 学生认证  发表于 2017-2-15 18:39:53 |只看作者 |坛友微信交流群
我想知道你的df是不是总是小于等于3行(我是从你判断的函数觉得你每种药最多是一行的,否则var2[var1==1]>0.9这样会出现很多T或F),如果是,我建议你不要用var2[var1==1]这样的索引方式,而是按照药物编号排序后,if有3种药要怎样,有2种药要怎样,这样逻辑会清晰一点

使用道具

板凳
zhangyangsmith 发表于 2017-2-15 21:59:02 |只看作者 |坛友微信交流群
A few things to clarify:

If the cure rate of drug 1 is greater than 0.9 then there will not be any drug that is 20% better, will it (meaning the drug has a cure rate greater than 1.25 according to your code)?

Drug 2 will be recommended if and only if the cure rate of drug 2 is at least 20% better than drug 1 and is better then drug 3? The same is for drug 3?

Is there an error on lines 9-10 and 16-17? Impossible to recommend drug 3?

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-19 19:33