I have the next code in Julia but the problem is when I use the vector p = [0.2,0.1,0.1,0.15,0.17] with n = 3 appears the next: BoundsError: attempt to access 4-element Vector{Float64} at index [5]. Could you help me?
function sin_reemplazo(p,n)
if !(isa(p,Vector) && isa(n,Int) && n>0 && n ≤ length(p))
@error “p debe ser un vector, n un entero positivo y n menor que la longitud del vector p”
return nothing
end
p ./sum(p) #Normalizo las probabilidades
@warn “Los valores del vector p fueron forzados a sumar 1”
muestra1 = []
disponible = collect(1:length(p))
for _ in 1:n
u = rand()
cum_sum = 0.0
seleccionado = 0
for j in 1:length(disponible)
cum_sum += p[disponible[j]]
if u ≤ cum_sum
seleccionado = disponible[j]
break
end
end
push!(muestra1,seleccionado)
indice_a_remover = findfirst(==(seleccionado), disponible)
if indice_a_remover !== nothing
deleteat!(disponible, indice_a_remover)
end
if !isempty(disponible)
# Filtra y normaliza el vector 'p' basado en los elementos disponibles
p_disponibles = p[disponible] # Extrae las probabilidades para los elementos disponibles
p = p_disponibles ./ sum(p_disponibles) # Normaliza el vector de probabilidades
end
end
return ("muestra sin reemplazo: ", muestra1)
end