数学的Which
功能的是广义If
:等效Mathematica的哪
Which[test_1, value_1, test_2, value_2, …]
评估每个依次
test_i
的,返回value_i
的对应于所述第一个中的值,该值产量为True
。
这只不过是一种方便的方式来摆脱嵌套简单的if-else测试的长序列中的多余语法。
R是否具有相同的功能?
顺便说一句,我知道,我总是可以这样做
if (test_1) value_1 else if (test_2) value_2 else ... value_n else default
,或者等价地,
if (test_1) value_1 else
if (test_2) value_2 else
...
if (test_n) value_n else
default
...但是,正如我已经提到,相比于当Which
,嵌套的if-else
语句带来了很多多余的语法。
而且,我所知道的
ifelse(t_1, v_1, ifelse(t_2, v_2, ..., ifelse(t_n, v_n, default)...))
...但结果到测试的形状敏感,所以它不完全等同于嵌套if-else
语句。
最后,R的switch
声明与我正在寻找的声明类似,因为它将一个调度封装在一系列测试中,但它并不完全相同。在
switch(expr,
case_1 = value_1,
case_2 = value_2,
...
case_n = value_n,
default)
...测试是expr
人人平等的比较对case_i
,而在Which
等,测试是任意的布尔表达式。
@JohnColeman:因为,AFAICT,'case_i'必须是标签;他们不能是任意的表达......(我可能错了) – kjo
@kjo你是对的。 –
@ZheyuanLi:尽管他们的名字,R的''哪个'功能和Mathematica的'哪个'做了很不同的事情。 – kjo