我有一个标准的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添加到每个单元格.
在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没有布尔值,因为它们是数字和存在之间的等价FALSE和a == 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并返回结果列表.