Declaración ifelse anidada

Todavía estoy aprendiendo a traducir un código SAS a R y recibo advertencias. Necesito entender donde estoy cometiendo errores. Lo que quiero hacer es crear una variable que resuma y diferencie el estado de una población: continental, extranjero, extranjero. Tengo una base de datos con 2 variables:

Id nacionalidad:idnat (francés, extranjero),

Siidnat es francés entonces

lugar de nacimiento de identificaciónidbp (continental, colonia, extranjero)

Quiero resumir la información deidnat yidbp en una nueva variable llamadaidnat2:

estado: k (continental, extranjero, extranjero)

Todas estas variables utilizan "tipo de carácter".

Resultados esperados en la columna idnat2:

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

Aquí está mi código SAS que quiero traducir en R:

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

Aquí está mi intento en R:

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

Recibo esta advertencia:

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

Me aconsejaron usar un "anidadoifelse"En cambio, por su facilidad, pero recibe más advertencias:

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

De acuerdo con el mensaje de advertencia, la longitud es mayor que 1, por lo que solo se tendrá en cuenta lo que haya entre los primeros corchetes. Lo siento, pero no entiendo qué tiene que ver esta longitud aquí. ¿Alguien sabe donde me equivoco?

Respuestas a la pregunta(8)

Su respuesta a la pregunta