如果"或"多个条件

den*_*y47 0 if-statement r

我有一个标准的2x2表

      Yes   No
Yes    a    b
No     c    d
Run Code Online (Sandbox Code Playgroud)

我想创建一个条件,其中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
  }
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误说

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

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

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

更新问题:

我有另一个相关的问题.

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

      Yes   No
Yes    a    b
No     c    d
Run Code Online (Sandbox Code Playgroud)

并且如果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
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*ath 9

在R中你不能,用来分隔线,但你可以使用;.

另外,你所考虑的方式a,b and c是boolean(TRUE/FALSE),因为它们是数字而不是这种情况.你的病情应该是:

if (a == 0 || b == 0 || c == 0 || d == 0)
Run Code Online (Sandbox Code Playgroud)

请注意,您的代码将仍然运行,即使a,b and c没有布尔值,因为它们是数字和存在之间的等价FALSEa == 0.这意味着您还可以将您的条件写为:

if (!a || !b || !c || !d)
Run Code Online (Sandbox Code Playgroud)

对于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
    }
}
Run Code Online (Sandbox Code Playgroud)

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