bucle for – Reemplazar los NAs por la media de su columna en R


Tengo un conjunto de datos en el que algunas de sus columnas son numéricas, en esas columnas numéricas existen valores NAs y lo que necesito es reemplazar cada uno de esos NA con el valor de la media de la columna en la que se encuentra. No llevo mucho tiempo usando R y según lo que he investigado lo que quiero se podría hacer con un for que vaya por cada columna o con laply, y esto es lo que tengo:

for (i in 1:ncol(indicadores_BD)) {
  indicadores_BD(is.na(indicadores_BD(,i)),i) <- mean((indicadores_BD(,i)),na.rm = TRUE)
  }

Pero con este for tengo 2 problemas, el primero es que no sé cómo decirle que esto lo haga sólo para las columnas de tipo numérico, y el segundo es el siguiente:

Error in `(.data.table`(indicadores_BD, , i) : 
  j (the 2nd argument inside (...)) is a single symbol but column name 'i' is not found. Perhaps you intended DT(, ..i). This difference to data.frame is deliberate and explained in FAQ 1.1.

Por otro lado, con laply tengo esto que ví en un ejemplo:

lapply(indicadores_BD, mutate_if(is.numeric, ~replace(indicadores_BD, is.na(indicadores_BD), mean(!is.na(indicadores_BD)))))

Pero tengo el problema de que me sale esto

Error in UseMethod("tbl_vars") : 
  no applicable method for 'tbl_vars' applied to an object of class "function"

No sé si exista una forma más fácil de hacer lo que quiero o qué es lo que estoy haciendo mal con for y laply, pero llevo ya horas varado con esto y en serio agradecería mucho su ayuda.