Last active
April 3, 2017 01:03
-
-
Save andresAlvarado/ed512b65dff9e1e1f55e5f7389acf84e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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