Ik heb een standaard 2×2 tafel
Yes No
Yes a b
No c d
Ik wil een voorwaarde creëren waarbij IF(a of b of c of d = 0) dan 0,5 wordt opgeteld bij elk van de cellen a,b,c,d.
Ik heb dit geprobeerd:
if(a && b && c && d == 0){
a=a+0.5, b=b+0.5, c=c+0.5, d=d+0.5
}
Maar ik krijg een foutmelding met de mededeling
Error: unexpected ',' in:
"if(a && b && c && d== 0){
a=a+0.5,"
d.w.z. Ik denk niet dat het me toelaat om meerdere dingen uit te voeren.
Ik denk ook niet dat de &&
goed staat tussen elk van de letters, omdat ik denk dat dat betekent IF(a en b en …)
UPDATE VAN VRAAG:
Ik heb nog een gerelateerde vraag.
Als ik een set van say n-tabellen heb, allemaal in het formaat:
Yes No
Yes a b
No c d
en als een van de a,b,c of d in een van de n tabellen gelijk is aan nul, dan wordt 0,5 opgeteld bij elk van de a,b,c,d voor alle n tabellen. Hoe zou ik dat doen?
Mijn lijst ziet er als volgt uit:
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
en wat ik probeer te zeggen is dat als een van de aspecten van de cellen van de tabel zijn 0, dan wil ik 0,5 toegevoegd worden aan elke cel.
Antwoord 1, Autoriteit 100%
In de stand R kunt u geen gebruik ,
om aparte lijn, maar u kunt ;
Ook de manier waarop je doet beschouwt a,b and c
zijn boolean (TRUE/FALSE
), dat is niet het geval als ze zijn nummers. Uw conditie moet zijn:
if (a == 0 || b == 0 || c == 0 || d == 0)
Merk op dat de code toch wordt uitgevoerd, zelfs als a,b and c
niet boolean omdat ze getallen en de gelijkwaardigheid tussen FALSE
en a == 0
. Dit betekent dat u kunt ook schrijf uw conditie als:
if (!a || !b || !c || !d)
Voor de UPDATE, ik beschouw matList
is de lijst met matrices:
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
zijn mat + 0.5
(dwz +0,5 elk element van de matrix door R suiker) aan elk element (hier matrices) van de lijst matList
en keert de resulterende lijst.
Antwoord 2, Autoriteit 5%
Het probleem ligt bij de komma’s die uw variabelen te scheiden. R syntax is het niet mogelijk om het te doen. Schrijf het op deze manier:
if (a && b && c && d == 0){
a=a+0.5
b=b+0.5
c=c+0.5
d=d+0.5
}
Een ander probleem is dat het gedrag dat u hebt beschreven niet overeenkomt met uw code. Als u schrijft en amp; & amp; het betekent en, niet of. Als u wilt controleren of elk element gelijk is aan 0, moet u het volgende schrijven:
Gewijzigd op basis van de opmerking van Rodrigo, de juiste code zou zijn:
if (0 %in% c(a,b,c,d)){
a=a+0.5
b=b+0.5
c=c+0.5
d=d+0.5
}