如何在R语言中编写if-else函数生成指定规则?
实现符合指定规则的rule函数
方案1:枚举所有情况的if-else判断
这是最直观的写法,枚举所有8种输入组合,逻辑清晰不易出错:
def rule(a, b, c): if a == 0 and b == 0 and c == 0: return 0 elif a == 0 and b == 0 and c == 1: return 1 elif a == 0 and b == 1 and c == 0: return 1 elif a == 0 and b == 1 and c == 1: return 1 elif a == 1 and b == 0 and c == 0: return 1 elif a == 1 and b == 0 and c == 1: return 0 elif a == 1 and b == 1 and c == 0: return 0 elif a == 1 and b == 1 and c == 1: return 0
方案2:简化逻辑表达式
通过分析输出规律,可将条件合并简化,减少代码量:
输出为1的场景仅两种:
- 第一个参数
a为0,且不是三个参数全为0; - 第一个参数
a为1,且b和c都为0。
对应代码:
def rule(a, b, c): if (a == 0 and not (b == 0 and c == 0)) or (a == 1 and b == 0 and c == 0): return 1 return 0
也可以用布尔运算进一步精简(0和1可直接参与逻辑运算):
def rule(a, b, c): return 1 if (not a and (b or c)) or (a and not b and not c) else 0
方案3:查表法
将三个二进制输入转换为十进制索引,通过预定义的查找表直接取值,代码最简洁,修改规则只需调整查找表:
def rule(a, b, c): # 索引计算:4*a + 2*b + c,对应二进制a b c的十进制值 lookup_table = [0, 1, 1, 1, 1, 0, 0, 0] return lookup_table[4*a + 2*b + c]
内容的提问来源于stack exchange,提问作者Bayes Rule
相关产品推荐
相关产品推荐

