Unconstrained numerical problems are common in solving practical applications that, due to its nature, are usually devised by several design variables, narrowing the kind of technique or algorithm that can deal with them. An interesting way of tackling this kind of issue is to use an evolutionary algorithm named Genetic Algorithm. In this context, this work is a tutorial on using real-coded genetic algorithms for solving unconstrained numerical optimization problems. We present the theory and the implementation in R language. Five benchmarks functions (Rosenbrock, Griewank, Ackley, Schwefel, and Alpine) are used as a study case. Further, four different crossover operators (simple, arithmetical, non-uniform arithmetical, and Linear), two selection mechanisms (roulette wheel and tournament), and two mutation operators (uniform and non-uniform) are shown. Results indicate that non-uniform mutation and tournament selection tend to present better outcomes.