I just noticed that inside your function promor::impute_na() the RF, kNN, and SVD function are actually expecting the features in columns and sample in rows. That means the matrix df should be transposed before calling them. I am not sure if that would cause any different results.