我有一个标准的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添加到每个单元格。
答案 0 :(得分:5)
在R中,您无法使用,
分隔行,但可以使用;
。
此外,您考虑a,b and c
的方式是布尔值(TRUE/FALSE
),但不是这样,因为它们是数字。你的病情应该是:
if (a == 0 || b == 0 || c == 0 || d == 0)
请注意,即使a,b and c
不是布尔值,您的代码也会运行,因为它们是数字,FALSE
和a == 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
}
}
lapply
将mat + 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
}