La metodologia es bastante simple, realmente es por fuerza bruta y usa los elementos más básicos del lenguaje R.
Más detalles en los comentarios.
pos_Primo <- function(n)
{
#Verificamos que el numero dado por el usuario sea valido -> No negativos ni nulos
if (n<=0){
print("Error, la posición debe ser extrictamente positiva")
} #El número dos en un caso especial y debe ser tomado por aparte, por cuestión de la lógica del algoritmo de fuerza bruta
else if (n==1){
print(paste("El número primo que se encuentra en la posición ",n, "es: 2"))
} else{
disc=c()
vec = c()
#El número del limite superior es arbitrario e indica el número limite para saber si es o no primo. Atención! Debido a que es por fuerza bruta, no es recomendable elevarlo demasiado.
for (num in seq(3,10000))
{
#TRUE <-> Presencia de otros factores <-> No es primo, FALSE lo opuesto.
disc[num-2]= FALSE
for(i in seq(2,num-1))
{
#De referencia
#print(i)
if((num%%i)==0){
disc[num-2]=TRUE
break
}
#De referencia
#print(disc[num-2])
}
#Obtenemos los números primos y los ubicamos en un vector "vec". En caso de no ser primo colocar un CERO
if (disc[num-2]==FALSE){
vec[num-2]=num
}
else{
vec[num-2]=0
}
}
#De referencia
#print(vec)
}
#Un nuevo vector con los números primos SIN los ceros respectando su posición
vec_primos <- c()
cont=1
for (k in 1:length(vec)){
if ((vec[k])!=0){
vec[k] -> vec_primos[cont]
cont = cont+1
}
}
#De referencia
#print(vec_primos)
return(vec_primos[n-1])
}
En el código se puede leer la leyenda De referencia, esto sirve para indicar operaciones importantes y evaluar en tiempo real lo que esta sucediendo sin necesidad de esperar hasta el final de la ejecución y observar el resultado. En general, es una buena práctica durantes las pruebas.