Skip to content

Instantly share code, notes, and snippets.

@andresAlvarado
Last active April 3, 2017 01:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save andresAlvarado/ed512b65dff9e1e1f55e5f7389acf84e to your computer and use it in GitHub Desktop.
Save andresAlvarado/ed512b65dff9e1e1f55e5f7389acf84e to your computer and use it in GitHub Desktop.
library('ggplot2')
f_lanzar <- function( p_dardos )
{
# Radio = 1.
r <- 1
# Generar n puntos (x,y) por medio de una distribucion uniforme.
x <- runif( min = -1, max = 1, n = p_dardos )
y <- runif( min = -1, max = 1, n = p_dardos )
# Calcular la distancia de los puntos generados al centro.
d <- x^2 + y^2
# Revisar si los puntos se encuentran dentro del circulo o fuera de el.
fig <- ifelse( test = d <= r
, yes = 'Dentro Circulo'
, no = 'Fuera Circulo'
)
# Devolver resultados
data.frame( x, y, fig, num_dardos = p_dardos )
}
# Semilla = 1401, para hacer este script reproducible.
set.seed( 1401 )
# Numero de dardos a generar.
dardos <- c( 50, 100, 200, 400, 800, 1600, 3200, 6400, 12800 )
# Recorrer el vector dardos y esperar resultados.
resultados <- lapply( X = dardos
, FUN = f_lanzar
)
# Debido a que los resultados generados por lapply son
# una lista, entonces convertirlo a data.frame.
resultados <- as.data.frame( x = do.call( what = rbind
, args = resultados
)
)
# Limitar el dataset a los dardos que estan situados dentro del circulo.
d_circulo <- subset( x = resultados
, select = c( 'num_dardos', 'x' )
, fig == 'Dentro Circulo'
)
# Agrupar el numero de dardos que dieron en la diana por ronda.
d_circulo <- aggregate( formula = x ~ num_dardos
, data = d_circulo
, FUN = length
)
names( x = d_circulo ) <- c( "num_dardos","dentro_circulo" )
# Calcular pi y el porcentaje de error de nuestro calculo
d_circulo$pi <- 4 * d_circulo$dentro_circulo / ( d_circulo$num_dardos )
# Crear grafica.
( ggplot()
+ geom_point( data = resultados
, aes( x = x
, y = y
, col = fig
)
, size = 0.8
)
+ theme_bw()
+ coord_equal()
+ facet_wrap(facets = ~num_dardos )
+ labs( x = 'X'
, y = 'Y'
)
+ scale_color_manual( values = c('#F4D03F','#C0392B') )
+ theme( strip.background = element_rect( fill = '#5d6c93' )
, strip.text = element_text( color = 'white' )
, text = element_text( size = 8 )
, line = element_blank()
, axis.text = element_blank()
, axis.ticks = element_blank()
, legend.position = 'none'
)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment