如果“或”多个条件

时间:2015-02-05 14:07:41

标签: r if-statement

我有一个标准的2x2表

      Yes   No
Yes    a    b
No     c    d

我想创建一个条件,其中IF(a或b或c或d = 0)然后0.5加到每个单元格a,b,c,d上。

我试过这个:

  if(a && b && c && d == 0){
    a=a+0.5, b=b+0.5, c=c+0.5, d=d+0.5
  }

但是我收到错误的说法

Error: unexpected ',' in:
"if(a && b && c && d== 0){
a=a+0.5,"

即。我不认为让我执行多项任务。

另外,我不认为&&在每个字母之间是正确的,因为我认为这意味着IF(a和b和......)

更新问题:

我有另一个相关的问题。

如果我说一组说n个表格,所有格式都是:

      Yes   No
Yes    a    b
No     c    d

并且如果n个表中的任何一个中的a,b,c或d中的一个等于零,则对于所有n个表,将α加到a,b,c,d中的每一个上。我该怎么做?

我的列表如下所示:

    n11   n12  n21   n22
1   188  1157  173  1168
2     2   201    1   101
3   369  2280  354  2289
4     1    61    0    61
5  1306 16870 1333 16773
6     4    81    3    79
7     6   117    5   118
8    19   334   15   318
9     1    49    0    48
10    0    36    1    33
11    2   114    3   113
12   13   433   37   696
13    1    64    0    65
14    4   157    1   160
15    1    42    0    43
16    1   150    5   146
17    7  1124   10  1117
18    2    78    2    77

我想说的是,如果表的单元格的任何方面都是0,那么我希望将0.5添加到每个单元格。

2 个答案:

答案 0 :(得分:5)

在R中,您无法使用,分隔行,但可以使用;

此外,您考虑a,b and c的方式是布尔值(TRUE/FALSE),但不是这样,因为它们是数字。你的病情应该是:

if (a == 0 || b == 0 || c == 0 || d == 0)

请注意,即使a,b and c不是布尔值,您的代码也会运行,因为它们是数字,FALSEa == 0之间存在等价关系。这意味着您还可以将您的条件写为:

if (!a || !b || !c || !d)

对于UPDATE,我认为matList是矩阵列表:

for (ii in  1:length(matList())) {
    if (any(matList[[ii]] == 0)) {  
        matList = lapply(matList, function(X){X+0.5})
        break # Exit the for loop
    }
}

lapplymat + 0.5(即由于R糖而对矩阵的每个元素+ 0.5)应用于列表matList的每个元素(此处为矩阵)并返回结果列表。

答案 1 :(得分:1)

问题在于用逗号分隔变量。 R语法不允许你这样做。这样写:

if (a && b && c && d == 0){
    a=a+0.5
    b=b+0.5
    c=c+0.5
    d=d+0.5
}

另一个问题是您描述的行为与您的代码不匹配。如果你写&&它意味着,而不是或。如果要检查每个元素是否等于0,则应编写以下内容:

根据罗德里戈的评论修改,正确的代码是:

if (0 %in% c(a,b,c,d)){
    a=a+0.5
    b=b+0.5
    c=c+0.5
    d=d+0.5
}