Создание функции, которая печатает несколько фреймов данных в - PullRequest
0 голосов
/ 30 марта 2020

У меня есть функция, которую я написал для создания симуляции, которая демонстрирует центральную предельную теорему. Я не уверен, возможно ли это, или мне лучше просто создавать отдельные функции, но в настоящее время он хранит только тот фрейм данных, который содержит средние значения всех испытаний.

# create function to perform CLT simulation 
# where n = sample size, t = number of trials, pop = which population is being used, popmean = population mean, 
cltsim <- function(n, t, pop, popmean, popsd, poptitle){
 popsim <- data.frame()

  # Run the simulation
  for(i in n) { # for each value of n
      col <- c()
      for(j in t) { #loop through each value of t
          trial <- 1:j
          counter <- j #set up an egg timer based on whichever t value we're on
          value <- c()
          while(counter > 0) {    # and extract n samples from the population
              bucket <- sample(pop, i, replace = TRUE)
              xbar <- mean(bucket) #calculate the sample mean
              value <- c(value, xbar) # and add it to a vector
              counter <- counter - 1 #egg timer counts down and loops back until it hits 0
          }
          sbar <- sd(value) #calculate the sample standard deviation 
          col <- cbind(trial, value, sbar, i, j) #merge all info together 
          popsim <- rbind(popsim, col) # attach it to empty dataframe 
      } 

  }

  #clean up so just the finished data frame is left 
  rm(col, bucket, value, counter, i, j, n, sbar, t, xbar, trial) 

  #tidy up data frame in order to graph it 
  names(popsim) <- c("trial#", "value", "sdev", "samples", "trials")

  #view the rows of data in popsim data table 
  popsim

}

когда я пытаюсь добавить больше кода, требующего создания таблиц данных, он не сохраняет их, ниже приведены блоки кода, которые я sh добавлю к функции

g1 <- ggplot(popsim, aes(x = value)) + geom_density(fill = "#09AB30") + 
        facet_grid(samples ~ trials, labeller = label_both) + 
        ggtitle(paste("Demonstrating The Central Limit Theorem with Simulation using", poptitle)) + 
        geom_vline(xintercept = popmean, linetype = "dashed")

g1

и

#create data frame of simulated sample standard deviations \
sdmatrix <- matrix(unique(popsim$sdev), nrow = 4, ncol = 4)
sdf <- as.data.frame(sdmatrix, row.names = c("t10", "t100", "t1000", "t10000"))
names(sdf) <- c("s1", "s10", "s30", "s50")
sdf <- t(sdf)
rm(sdmatrix)
sdf  

exvals <- pop1sd/sqrt(c(1, 10, 30, 50))
dfex <- as.data.frame(exvals, row.names = c("s1", "s10", "s30", "s50"))
names(dfex) <- "Predicted Standard Deviations"
dfex

Я осмотрелся и нигде не могу найти решение, лучше ли мне писать для них разные функции? Будем весьма благодарны за любые советы или предложения о том, как сделать этот код более эффективным / действенным.

заранее спасибо

...