Instrução ifelse aninhada

Eu ainda estou aprendendo como traduzir um código SAS em R e recebo avisos. Eu preciso entender onde estou cometendo erros. O que eu quero fazer é criar uma variável que resuma e diferencie o status de uma população: continente, estrangeiro e estrangeiro. Eu tenho um banco de dados com duas variáveis:

nacionalidade id:idnat (francês, estrangeiro),

E seidnat é francês então:

berço de id:idbp (continente, colônia, no exterior)

Quero resumir as informações deidnat eidbp em uma nova variável chamadaidnat2:

status: k (continente, estrangeiro, estrangeiro)

Todas essas variáveis ​​usam "tipo de caractere".

Resultados esperados na coluna idnat2:

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

Aqui está o meu código SAS que quero traduzir em R:

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

Aqui está minha tentativa em R:

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

Eu recebo este aviso:

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

Fui aconselhado a usar um "aninhadoifelse"em vez disso, por sua facilidade, mas receba mais avisos:

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

De acordo com a mensagem de aviso, o tamanho é maior que 1, portanto, somente o que está entre os primeiros colchetes será levado em consideração. Desculpe, mas eu não entendo o que este comprimento tem a ver com aqui? Alguém sabe onde estou errado?

questionAnswers(8)

yourAnswerToTheQuestion