IF “OF” meerdere voorwaarden

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 czijn 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 cniet boolean omdat ze getallen en de gelijkwaardigheid tussen FALSEen a == 0. Dit betekent dat u kunt ook schrijf uw conditie als:

if (!a || !b || !c || !d)

Voor de UPDATE, ik beschouw matListis 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
    }
}

lapplyzijn mat + 0.5(dwz +0,5 elk element van de matrix door R suiker) aan elk element (hier matrices) van de lijst matListen 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
}

Other episodes