[R] Generating Data mvrnorm and loops

Uwe Ligges ligges at statistik.uni-dortmund.de
Thu Jan 6 17:14:15 CET 2005


Doran, Harold wrote:

> Dear List:
> 
> I am generating N datasets using the following
> 
> Sigma<-matrix(c(400,80,80,80,80,400,80,80,80,80,400,80,80,80,80,400),4,4
> )
> mu<-c(100,150,200,250)
> 
> N=100
> for(i in 1:N) 
> { 
> assign(paste("Data.", i, sep=''),
> as.data.frame(cbind(seq(1:1000),(mvrnorm(n=1000, mu, Sigma)))))
> } 
> 
> With these datasets, I need to work on some of the variables and then
> run each dataset through a linear model. I am having some trouble
> working with variables within the loop and wonder if anyone can offer
> any pointers. 
> 
> The first thing I am trying to do is add 2 variables together that are
> in each dataset. I am sure this is extremely trivial, but I can't seem
> to get that to work.
> 
> I have tried:
> 
> for (i in 1:5){
> assign(paste("x",i,sep=""),(get(paste("Data.",i,sep=""))[["V2"]])+(get(p
> aste("Data.",i,sep=""))[["V2"]]))
> }

It's time to forget those 100 separate R objects, but try to work with a 
list, which makes life worth living again. ;-)

I'm reusing most of your code:

   Sigma <- matrix(
     c(400,80,80,80,80,400,80,80,80,80,400,80,80,80,80,400),
     4, 4)
   mu <- c(100,150,200,250)
   N <- 100

   Data <- lapply(seq(N), function(x)
     as.data.frame(cbind(1:1000, mvrnorm(n=1000, mu, Sigma))))

   # so we have a list Data with 100 elements,
   # each containing a data.frame.

   for(i in seq(along=Data))
     Data[[i]]$V6 <- Data[[i]]$V1 + Data[[i]]$V2


Uwe Ligges



> Now, this code works, but I want for this vector to be a variable within
> each dataframe. Outside the loop, the equivalent code would be
> 
> attach(Data.1)
> Data.1$V6<-V1+V2
> Detach(Data.1)
> 
> Another task I would like to perform is to reshape each dataframe for
> longitudinal analysis. I have tried the following:
> 
> for (i in 1:5){
> assign(paste("long",i,sep=""),reshape(paste("Data.",i,sep=""),idvar=get(
> paste("Data.",i,sep="")[["V1"]]),
> varying=list(names(get(paste("Data",i,sep="")[["V2"]]):get(paste("Data",
> i,sep="")[["V5"]])),v.names="score",direction="long")
> } 
>
> This isn't working and I'm not sure if the code is even close. 
> 
> In general, performing all of these operations outside a loop for a
> single dataframe is simple. My trouble is performing equivalent
> operations within a loop. 
> 
> Thanks for any help offered.
> 
> Harold
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html




More information about the R-help mailing list