IF "OR" 多个条件

IF "OR" multiple conditions

我有一个标准的 2x2 table

      Yes   No
Yes    a    b
No     c    d

我想创建一个条件,使 IF(a or b or c or d = 0) then 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 and b and ...)

问题更新:

我还有一个相关问题。

如果我说了一组say n tables,所有的格式都是:

      Yes   No
Yes    a    b
No     c    d

并且如果 n tables 中的任何一个中的 a、b、c 或 d 之一等于零,则将 0.5 添加到每个 a、b、c、d 中在 n table 中。我该怎么做?

我的列表如下所示:

    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

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

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

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

另一个问题是您描述的行为与您的代码不匹配。如果你写&&,它的意思是and,不是or。如果要检查每个元素是否等于0,应该这样写:

根据 Rodrigo 的评论修改,正确的代码为:

if (0 %in% c(a,b,c,d)){
    a=a+0.5
    b=b+0.5
    c=c+0.5
    d=d+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)

对于更新,我认为 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
    }
}

lapply 对列表 matList 和 returns 结果列表。