Home > Software design >  How to edit the loop to save the mean of each sample to a matrix in R?
How to edit the loop to save the mean of each sample to a matrix in R?

Time:11-23

set.seed(89235)
values<-c(10, 5, 10, 25, 50, 100, 500, 1000)
n=length(values)
for (i in 1:n){
mymean<- mean(rnorm(values[i], mean=0, sd=1))  
cat("sample size:",values[i],"mean:", mymean, fill=TRUE)
}

I have created a Loop as above, but how could I add a loop to also save the mean of each sample to a matrix

CodePudding user response:

My instinct for this approach is to append mymean to a list in the loop and from there convert the list to any data format you need. I've included how to convert to a matrix from there but you could go to a data.frame as well.

set.seed(89235)
values<-c(10, 5, 10, 25, 50, 100, 500, 1000)
n=length(values)
mylist = list()

for (i in 1:n){
  mymean<- mean(rnorm(values[i], mean=0, sd=1)) 
  mylist = append(mylist, mymean) # append each iteration of mymean to mylist
  cat("sample size:",values[i],"mean:", mymean, fill=TRUE)
}
  

matrix(unlist(mylist), ncol =1, nrow =length(mylist))

CodePudding user response:

You have to firstly define mymean as a vector variable having n elements. Then, store your each mean value at each iteration into mymean's appropriate index. Do not forget to add the index of mymean when printing the result to the console.

set.seed(89235)
values <- c(10, 5, 10, 25, 50, 100, 500, 1000)
n <- length(values)
mymean <- vector(length = n)

for (i in 1:n){
  mymean[i]<- mean(rnorm(values[i], mean=0, sd=1))  
  cat("sample size:",values[i],"mean:", mymean[i], fill=TRUE)
}

(mymean)

A simpler approach is to use sapply function.

set.seed(89235)
values <- c(10, 5, 10, 25, 50, 100, 500, 1000)

mymean <- sapply(values, function(input) {
  mean.value <- mean(rnorm(input, mean=0, sd=1))  
  cat("sample size:",input,"mean:", mean.value, fill=TRUE)
  return(mean.value)
})

(mymean)
  • Related