Zagnieżdżona instrukcja ifelse

Nadal uczę się tłumaczyć kod SAS na R i otrzymuję ostrzeżenia. Muszę zrozumieć, gdzie popełniam błędy. Chcę stworzyć zmienną podsumowującą i różnicującą 3 status populacji: kontynent, za granicą, obcokrajowiec. Mam bazę danych z 2 zmiennymi:

id narodowość:idnat (francuski, cudzoziemiec),

Jeśliidnat jest wtedy francuski:

miejsce urodzenia id:idbp (kontynent, kolonia, za granicą)

Chcę podsumować informacje zidnat iidbp do nowej zmiennej o nazwieidnat2:

status: k (kontynent, za granicą, cudzoziemiec)

Wszystkie te zmienne używają „typu znaku”.

Oczekiwane wyniki w kolumnie idnat2:

   idnat     idbp   idnat2
1  french mainland mainland
2  french   colony overseas
3  french overseas overseas
4 foreign  foreign  foreign

Oto mój kod SAS, który chcę przetłumaczyć w R:

if idnat = "french" then do;
   if idbp in ("overseas","colony") then idnat2 = "overseas";
   else idnat2 = "mainland";
end;
else idnat2 = "foreigner";
run;

Oto moja próba w R:

if(idnat=="french"){
    idnat2 <- "mainland"
} else if(idbp=="overseas"|idbp=="colony"){
    idnat2 <- "overseas"
} else {
    idnat2 <- "foreigner"
}

Otrzymuję to ostrzeżenie:

Warning message:
In if (idnat=="french") { :
  the condition has length > 1 and only the first element will be used

Poradzono mi, żebyś użył „zagnieżdżonego”ifelse„zamiast tego za jego łatwość, ale uzyskaj więcej ostrzeżeń:

idnat2 <- ifelse (idnat=="french", "mainland",
        ifelse (idbp=="overseas"|idbp=="colony", "overseas")
      )
            else (idnat2 <- "foreigner")

Zgodnie z komunikatem ostrzegawczym długość jest większa niż 1, więc brane są pod uwagę tylko to, co znajduje się pomiędzy pierwszymi nawiasami. Przepraszam, ale nie rozumiem, co ta długość ma tutaj wspólnego? Ktoś wie, gdzie się mylę?

questionAnswers(8)

yourAnswerToTheQuestion