simulations <- 10000 # number of simulations
perimeter <- 1

# randomly generate a point and check if it is in circle
f_point_in_circle <- function(perimeter=1){
    x <- runif(n=1, min=-perimeter, max=perimeter)
    y <- runif(n=1, min=-perimeter, max=perimeter)
    return(list(x=x, 
                y=y,
                in_circle=x^2 + y^2 <= perimeter^2))
}

# Monte Carlo simulations
set.seed(123)
pi_df <- data.frame(x=rep(NA, simulations),
                    y=rep(NA, simulations),
                    in_circle=rep(NA, simulations))
for (i in seq(simulations)){
    my_simulation <- f_point_in_circle()
    pi_df$in_circle[i] <- my_simulation$in_circle
    pi_df$x[i] <- my_simulation$x
    pi_df$y[i] <- my_simulation$y
}

my_pi <- 4 * sum(pi_df$in_circle) / nrow(pi_df)

library(ggplot2)
ggplot(pi_df, aes(x=x, y=y, color=as.factor(in_circle))) +
    geom_point() +
    theme(legend.position='none')