Sorry, The last three lines should read: all <- apply(results, 1, function(x) length(intersect(x, seq(sides)))==sides) sum(all)/reps results <- as.data.frame(results)
To generalize them for values of sides other than 6. On Fri, Apr 22, 2022 at 11:05 PM Paul Bernal <paulberna...@gmail.com> wrote: > Thank you so much David! El El vie, 22 de abr. de 2022 a la(s) 11:04 p. > m., David Carlson <dcarl...@tamu.edu> escribió: Since the rolls are > independent, it is not necessary to separate the rolls into two stages: > sides <- 6 > ZjQcmQRYFpfptBannerStart > This Message Is From an External Sender > This message came from outside your organization. > > ZjQcmQRYFpfptBannerEnd > Thank you so much David! > > El El vie, 22 de abr. de 2022 a la(s) 11:04 p. m., David Carlson < > dcarl...@tamu.edu> escribió: > >> Since the rolls are independent, it is not necessary to separate the >> rolls into two stages: >> >> sides <- 6 >> months <- 12 >> reps <- 100 >> >> set.seed(2022) >> results <- matrix(sample.int >> <https://urldefense.com/v3/__http://sample.int__;!!KwNVnqRv!GvZvIF7bCsJmP-MoZAjpwRSwA0SLF9dwlLokWfsqj07fpKB_yoDtZ64yl90ktreESKpQkxnxfP7vuF2jfsHvZA$>(sides, >> months*reps, replace=TRUE), reps, months, byrow=TRUE) >> colnames(results) <- month.name >> <https://urldefense.com/v3/__http://month.name__;!!KwNVnqRv!GvZvIF7bCsJmP-MoZAjpwRSwA0SLF9dwlLokWfsqj07fpKB_yoDtZ64yl90ktreESKpQkxnxfP7vuF14dyuUpA$> >> all6 <- apply(results, 1, function(x) length(intersect(x, 1:6))==6) >> sum(all6)/reps >> # 0.53 which matches Rui's result >> results <- as.data.frame(results) >> >> David L. Carlson >> >> >> >> On Thu, Apr 21, 2022 at 4:04 AM Rui Barradas <ruipbarra...@sapo.pt> >> wrote: >> >>> Hello, There's an error in my code, inline. Às 07:55 de 21/04/2022, Rui >>> Barradas escreveu: > Hello, > > For what I understand of the question, the >>> followng might answer it. > > The functions below roll dice and simulate R >>> replicates >>> ZjQcmQRYFpfptBannerStart >>> This Message Is From an External Sender >>> This message came from outside your organization. >>> >>> ZjQcmQRYFpfptBannerEnd >>> >>> Hello, >>> >>> There's an error in my code, inline. >>> >>> Às 07:55 de 21/04/2022, Rui Barradas escreveu: >>> > Hello, >>> > >>> > For what I understand of the question, the followng might answer it. >>> > >>> > The functions below roll dice and simulate R replicates of dice rolls. >>> > Then 12 (one per month) 6 sided dice rolls are simulated 100 times. >>> > >>> > The colMeans/apply computes the empiric probabilities of having all 6 >>> > sides occur in each row, Jan to Dec and a overall probabilty is the mean >>> > of those probabilities. >>> > >>> > The matrix is coerced to data.frame only at the end. >>> > >>> > >>> > >>> > dice <- function(rolls = 1, ndice = 1, sides = 6) { >>> > roll <- function(ndice = 1, sides = 6) { >>> > sample(seq_len(sides), ndice, replace = TRUE) >>> > } >>> > y <- replicate(rolls, roll(ndice = ndice, sides = sides)) >>> > if(is.null(dim(y))) y else colSums(y) >>> > } >>> > dice_simul <- function(rolls = 1, ndice = 1, sides = 6, R) { >>> > if(missing(R)) { >>> > stop("number of simulations 'R' is missing with no default.") >>> > } >>> > replicate(R, dice(rolls = rolls, ndice = ndice, sides = sides)) >>> > } >>> > >>> > dice_rolls <- 100 >>> > #dice_rolls <- 1e6 >>> > num_dice <- 1 >>> > dice_sides <- 6 >>> > months <- 12 >>> > >>> > set.seed(2022) >>> > prob_frame <- t(dice_simul(months, num_dice, dice_sides, R = dice_rolls)) >>> > colnames(prob_frame) <- month.name >>> > <https://urldefense.com/v3/__http://month.name__;!!KwNVnqRv!GvZvIF7bCsJmP-MoZAjpwRSwA0SLF9dwlLokWfsqj07fpKB_yoDtZ64yl90ktreESKpQkxnxfP7vuF14dyuUpA$> >>> > head(prob_frame) >>> > >>> >>> # --- wrong >>> > p <- colMeans(apply(prob_frame, 1, \(x) 1:6 %in% x)) >>> > mean(p) >>> > # [1] 0.9116667 >>> >>> This should be >>> >>> yes_no <- apply(prob_frame, 1, \(x) all(1:6 %in% x)) >>> p <- mean(yes_no) >>> p >>> # [1] 0.53 >>> >>> >>> Rui Barradas >>> >>> >>> >>> > >>> > prob_frame <- as.data.frame(prob_frame) >>> > >>> > >>> > Hope this helps, >>> > >>> > Rui Barradas >>> > >>> > >>> > Às 05:02 de 21/04/2022, Paul Bernal escreveu: >>> >> Dear friend Bert, >>> >> >>> >> Thank you so much for your kind reply. The first thing I need to do is to >>> >> simulate dice rolls, say 120 times. >>> >> >>> >> I want to populate an m by 12 dataframe with the results of each dice >>> >> roll. >>> >> For example, the result from dice roll #1 would need to go on row 1, >>> >> column1, the result from dice roll #2 would have to go in row 1 column 2, >>> >> and so on. >>> >> >>> >> The reason why I want to store those results in a dataframe is to be able >>> >> to perform some other calculations afterwards. >>> >> >>> >> This is for a project I am doing. >>> >> >>> >> So this is the situation: >>> >> You and five friends – a total of six people – plan to meet once per >>> >> month >>> >> to have dinner together, with one of you choosing the restaurant each >>> >> month. Rather than scheduling the entire year in advance, you decide to >>> >> make it interesting: each month a single six-sided die will be rolled to >>> >> determine which of you gets to choose the restaurant that month. How >>> >> likely >>> >> is it that everyone will have a chance to eat at their own favorite >>> >> restaurant? That is, what is the probability p that over the next 12 >>> >> months, each of you will have had at least one opportunity to choose >>> >> where >>> >> to eat? >>> >> >>> >> This is what I am asked to do: >>> >> Write a program to estimate the desired probability p via simulation. The >>> >> program should input a sequence of positive integer number of trials to >>> >> simulate using the language's pseudorandom number generator and calculate >>> >> the corresponding fractions of simulated trials that are “successful" >>> >> (i.e., all 6 parties get at least one opportunity to choose where to eat. >>> >> Alice, Bob, Charley, Fred, Ellen, Don, Don, Don, Don, Alice, Charley, Bob >>> >> is a successful trial. Alice, Bob, Charley, Ellen, Don, Don, Don, Don, >>> >> Ellen, Alice, Charley, Bob is not a successful trial since Fred does not >>> >> get to choose.) >>> >> Turn in a set of 10 trials showing each roll of the dice to show >>> >> correctness. Label the out-comes. Keep in mind that a single trial >>> >> requires >>> >> rolling the die twelve times. Calculate and print the average >>> >> probability p >>> >> for the set. Please refer to your friends by name. >>> >> >>> >> For this reason, I am trying to simulate the n trials, and then >>> >> populate a >>> >> table with the results from the trials. I have to simulate a dice roll >>> >> dice >>> >> for each month and for each row. Rows would be equivalent to years, and >>> >> then columns would be equivalent to the month of a particular year. >>> >> >>> >> Once I store the results in a dataframe, everything is much easier. >>> >> >>> >> I installed package dice and performed simulations by doing: >>> >> #declaring variables: >>> >> #1)dice_rolls which is the number of times the dice will be rolled >>> >> #2)num_dice which is the number of dice that will be rolled each time >>> >> #3)dice_sides which is the number of sides of the dice >>> >> #function dice will take each one of these variables as its parameter to >>> >> perform the simulation >>> >> dice_rolls = 120 >>> >> num_dice = 1 >>> >> dice_sides = 6 >>> >> >>> >> #performing simulation >>> >> dice_simul = dice(rolls = dice_rolls, ndice = num_dice, sides = >>> >> dice_sides, >>> >> plot.it >>> >> <https://urldefense.com/v3/__http://plot.it__;!!KwNVnqRv!GvZvIF7bCsJmP-MoZAjpwRSwA0SLF9dwlLokWfsqj07fpKB_yoDtZ64yl90ktreESKpQkxnxfP7vuF1nNnEZyA$> >>> >> = TRUE) >>> >> >>> >> I tried the following, but did not work as expected: >>> >> >>> >> for (i in 1:nrow(dice_simul)){ >>> >> for(j in 1:ncol(prob_frame)){ >>> >> for(k in 1:nrow(prob_frame)){ >>> >> prob_frame[k,j] = dice_simul[i,1] >>> >> } >>> >> } >>> >> } >>> >> >>> >> I apologize for the long explanation. >>> >> >>> >> Best regards, >>> >> >>> >> Paul >>> >> >>> >> >>> >> El mié, 20 abr 2022 a las 22:47, Bert Gunter (<bgunter.4...@gmail.com>) >>> >> escribió: >>> >> >>> >>> If I understand you correctly, it's simple. >>> >>> Matrices in R are vectors with a dimension attribute. By default, they >>> >>> are populated column by column. Use 'byrow = TRUE to populate by row >>> >>> instead. For example: >>> >>> >>> >>>> matrix (1:36, ncol = 12, byrow = TRUE) >>> >>> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] >>> >>> [1,] 1 2 3 4 5 6 7 8 9 10 11 12 >>> >>> [2,] 13 14 15 16 17 18 19 20 21 22 23 24 >>> >>> [3,] 25 26 27 28 29 30 31 32 33 34 35 36 >>> >>> >>> >>> I leave it to you to use the 'dimnames' argument of ?matrix to give >>> >>> names to the column and then subsequently convert to a data frame if >>> >>> you like. >>> >>> >>> >>> Bert Gunter >>> >>> >>> >>> "The trouble with having an open mind is that people keep coming along >>> >>> and sticking things into it." >>> >>> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) >>> >>> >>> >>> On Wed, Apr 20, 2022 at 8:38 PM Paul Bernal <paulberna...@gmail.com> >>> >>> wrote: >>> >>>> >>> >>>> Dear friends, >>> >>>> >>> >>>> Hope you are doing well. I need to simulate a 1 dice roll for each >>> >>>> one of >>> >>>> the twelve months of the year and perform 100 trials, so I thought of >>> >>>> constructing a dataframe with twelve columns and 100 rows the following >>> >>> way: >>> >>>> >>> >>>> num_rows = 100 >>> >>>> >>> >>>> prob_frame <- data.frame(matrix(NA, nrow = num_rows, ncol = 12)) >>> >>>> >>> >>> colnames(prob_frame)<-c("January","February","March","April","May","June","July","August","September","October","November","December") >>> >>> >>> >>>> >>> >>>> Now, using the dice package, I can simulate n number of dice rolls as >>> >>>> follows: >>> >>>> #performing simulation >>> >>>> dice_simul = dice(rolls = dice_rolls, ndice = num_dice, sides = >>> >>> dice_sides, >>> >>>> plot.it >>> >>>> <https://urldefense.com/v3/__http://plot.it__;!!KwNVnqRv!GvZvIF7bCsJmP-MoZAjpwRSwA0SLF9dwlLokWfsqj07fpKB_yoDtZ64yl90ktreESKpQkxnxfP7vuF1nNnEZyA$> >>> >>>> = TRUE) >>> >>>> >>> >>>> What I would like to do is to populate each column and row with the >>> >>> results >>> >>>> of dice_simul. >>> >>>> >>> >>>> Let me show you the structure of dice_simul: >>> >>>>> str(dice_simul) >>> >>>> Classes ‘dice’ and 'data.frame': 100 obs. of 1 variable: >>> >>>> $ Red: int 2 2 1 2 5 4 4 6 1 4 ... >>> >>>>> dput(dice_simul) >>> >>>> structure(list(Red = c(2L, 2L, 1L, 2L, 5L, 4L, 4L, 6L, 1L, 4L, >>> >>>> 4L, 2L, 6L, 2L, 2L, 1L, 3L, 6L, 1L, 5L, 5L, 5L, 3L, 4L, 2L, 6L, >>> >>>> 4L, 6L, 6L, 2L, 1L, 2L, 2L, 6L, 4L, 2L, 3L, 5L, 6L, 6L, 4L, 5L, >>> >>>> 4L, 6L, 6L, 3L, 4L, 1L, 5L, 3L, 3L, 5L, 3L, 4L, 1L, 3L, 3L, 2L, >>> >>>> 4L, 1L, 2L, 1L, 6L, 3L, 5L, 5L, 3L, 4L, 4L, 5L, 4L, 1L, 5L, 3L, >>> >>>> 4L, 4L, 3L, 6L, 5L, 2L, 4L, 1L, 1L, 6L, 4L, 3L, 6L, 5L, 6L, 2L, >>> >>>> 6L, 1L, 6L, 6L, 4L, 3L, 4L, 2L, 1L, 5L)), class = c("dice", >>> >>>> "data.frame" >>> >>>> ), row.names = c(NA, -100L)) >>> >>>> >>> >>>> For example, the first number of dice_simul should go to row 1 for >>> >>> January, >>> >>>> the second number of dice_simul should go to row 1 for February, ... >>> >>>> the >>> >>>> twelveth number of dice_simul should go to row 1 for December, the 13th >>> >>>> number should go to row 2 for january, and so on. >>> >>>> >>> >>>> This is what I tried to do but doesn´t work they way I want to: >>> >>>> >>> >>>> #1)dice_rolls which is the number of times the dice will be rolled >>> >>>> #2)num_dice which is the number of dice that will be rolled each time >>> >>>> #3)dice_sides which is the number of sides of the dice >>> >>>> #function dice will take each one of these variables as its >>> >>>> parameter to >>> >>>> perform the simulation >>> >>>> dice_rolls = 100 >>> >>>> num_dice = 1 >>> >>>> dice_sides = 6 >>> >>>> >>> >>>> #performing simulation >>> >>>> dice_simul = dice(rolls = dice_rolls, ndice = num_dice, sides = >>> >>> dice_sides, >>> >>>> plot.it >>> >>>> <https://urldefense.com/v3/__http://plot.it__;!!KwNVnqRv!GvZvIF7bCsJmP-MoZAjpwRSwA0SLF9dwlLokWfsqj07fpKB_yoDtZ64yl90ktreESKpQkxnxfP7vuF1nNnEZyA$> >>> >>>> = TRUE) >>> >>>> >>> >>>> num_rows = 100 >>> >>>> >>> >>>> prob_frame <- data.frame(matrix(NA, nrow = num_rows, ncol = 12)) >>> >>>> colnames(prob_frame) <- >>> >>>> >>> >>> c("January","February","March","April","May","June","July","August","September","October","November","December") >>> >>> >>> >>>> >>> >>>> >>> >>>> for (j in 1:12){ >>> >>>> for (i in 1:num_rows){ >>> >>>> prob_frame[i,j]=dice_simul[i,1] >>> >>>> } >>> >>>> } >>> >>>> I basically want to populate the twelve months for the first row, then >>> >>> the >>> >>>> twelve months for the second row, and so on, until I get to populate >>> >>>> the >>> >>>> twelve months for the last row sequentially. >>> >>>> >>> >>>> How could I accomplish this? >>> >>>> >>> >>>> Any help and/or guidance will be greatly appreciated. >>> >>>> >>> >>>> Best regards, >>> >>>> Paul >>> >>>> >>> >>>> [[alternative HTML version deleted]] >>> >>>> >>> >>>> ______________________________________________ >>> >>>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> >>>> https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help__;!!KwNVnqRv!GmY3d1J5JTqq58eyId3zjOPuWKBidPg_ojtvbhygQyudquxNCQkrcOT1xJfOQTFSlSxEJgiAwDPunCAbZaomfvI$ >>> >>>> PLEASE do read the posting guide >>> >>> https://urldefense.com/v3/__http://www.R-project.org/posting-guide.html__;!!KwNVnqRv!GmY3d1J5JTqq58eyId3zjOPuWKBidPg_ojtvbhygQyudquxNCQkrcOT1xJfOQTFSlSxEJgiAwDPunCAb7rrtTbc$ >>> >>>> and provide commented, minimal, self-contained, reproducible code. >>> >>> >>> >> >>> >> [[alternative HTML version deleted]] >>> >> >>> >> ______________________________________________ >>> >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> >> https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help__;!!KwNVnqRv!GmY3d1J5JTqq58eyId3zjOPuWKBidPg_ojtvbhygQyudquxNCQkrcOT1xJfOQTFSlSxEJgiAwDPunCAbZaomfvI$ >>> >> PLEASE do read the posting guide >>> >> https://urldefense.com/v3/__http://www.R-project.org/posting-guide.html__;!!KwNVnqRv!GmY3d1J5JTqq58eyId3zjOPuWKBidPg_ojtvbhygQyudquxNCQkrcOT1xJfOQTFSlSxEJgiAwDPunCAb7rrtTbc$ >>> >> and provide commented, minimal, self-contained, reproducible code. >>> > >>> > ______________________________________________ >>> > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> > https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help__;!!KwNVnqRv!GmY3d1J5JTqq58eyId3zjOPuWKBidPg_ojtvbhygQyudquxNCQkrcOT1xJfOQTFSlSxEJgiAwDPunCAbZaomfvI$ >>> > PLEASE do read the posting guide >>> > https://urldefense.com/v3/__http://www.R-project.org/posting-guide.html__;!!KwNVnqRv!GmY3d1J5JTqq58eyId3zjOPuWKBidPg_ojtvbhygQyudquxNCQkrcOT1xJfOQTFSlSxEJgiAwDPunCAb7rrtTbc$ >>> > and provide commented, minimal, self-contained, reproducible code. >>> >>> ______________________________________________r-h...@r-project.org mailing >>> list -- To UNSUBSCRIBE and more, >>> seehttps://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-help__;!!KwNVnqRv!GmY3d1J5JTqq58eyId3zjOPuWKBidPg_ojtvbhygQyudquxNCQkrcOT1xJfOQTFSlSxEJgiAwDPunCAbZaomfvI$ >>> PLEASE do read the posting guide >>> https://urldefense.com/v3/__http://www.R-project.org/posting-guide.html__;!!KwNVnqRv!GmY3d1J5JTqq58eyId3zjOPuWKBidPg_ojtvbhygQyudquxNCQkrcOT1xJfOQTFSlSxEJgiAwDPunCAb7rrtTbc$ >>> and provide commented, minimal, self-contained, reproducible code. >>> >>> [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.