Clark Allan wrote:

hi

thanx for the help. i dont want to use matrices. i solve my problem, see
the example below.

the set.seed is used because in my actual application i need to generate
INDEPENDENT variables. will this ensure that the variables are
independent?

Why do you want to set.seed() inside the loop?
Just set it once at the beginning of your simulation in order to get reproducible results - you can assume independence anyway.
Or maybe I am missing the point why you are going to set.seed() inside the loop.


Uwe Ligges




z3<-function(w) { for (i in 1:w) { ss<-0 for (j in 1:5) { set.seed(j+1+(i-1)*6) r<-rnorm(1) ss<-ss+r a<-list(ss=ss,r=r) } print(paste("############ i=",i,"############")) print(a) } } z3(3)




z3(3)

[1] "############ i= 1 ############" $ss [1] -2.213343

$r
[1] 0.269606

[1] "############ i= 2  ############"
$ss
[1] -2.904235

$r
[1] -1.480568

[1] "############ i= 3  ############"
$ss
[1] -0.01516304

$r
[1] 0.9264592


thanx again

***
allan

###############################################################################################
###############################################################################################
###############################################################################################
###############################################################################################
###############################################################################################
###############################################################################################


Adaikalavan Ramasamy wrote:

You will need to capture the value of ss at the end of each 'i' as such

z4 <-function(w){

 output <- numeric(w)

 for (i in 1:w){

   set.seed(i+6)  # this is redundant line
   ss<-0

   for (j in 1:5){
     set.seed(j+1+(i-1)*6)
     r<-rnorm(1)
     ss<-ss+r
   }

   output[i] <- ss
 }
 return(output)
}

BTW, I do not think it is a good idea to set.seed() so many times.

To answer you more general question, see if the following is useful.
I am trying to simulate 'n' values from a standard normal distribution
but 'n' is random variable itself.

f <-function(w, lambda=3){

 tmp <- list(NULL)

 for (i in 1:w){
   n <- 1 + rpois(1, lambda=lambda)  # number of simulation required
   tmp[[ i ]]  <- rnorm(n)
 }

 # flatten the list into a ragged matrix
 out.lengths   <- sapply(tmp, length)
 out           <- matrix( nr=w, nc=max( out.lengths ) )
 rownames(out) <- paste("w =", 1:w)
 for(i in 1:w) out[i, 1:out.lengths[i] ] <- tmp[[i]]

 return(out)
}

f(6, lambda=3)

It is not very elegant but I hope that helps you out somehow.

Regards, Adai

On Thu, 2005-03-10 at 10:16 +0200, Clark Allan wrote:

hi all

another simple question.

i've written a dummy program so that you get the concept. (the code
could be simplfied such that there are no loops. but lets leave the
loops in for now.)

z1<-function(w)
{
for (i in 1:w)
{
set.seed(i+6)
ss<-0
     for (j in 1:5)
     {
             set.seed(j+1+(i-1)*6)
             r<-rnorm(1)
             ss<-ss+r
     }
list(ss=ss)
}
}
check.1<-z1(3)
check.1

the results is:
$ss
[1] -0.01516304


what i want is something that looks like this:

j=1
$ss
[1] -2.213343

j=2
$ss
[1] -2.904235

j=3
$ss
[1] -0.01516304


i know that i could use the print command. (see z2)

z2<-function(w)
{
for (i in 1:w)
{
set.seed(i+6)
ss<-0
     for (j in 1:5)
     {
             set.seed(j+1+(i-1)*6)
             r<-rnorm(1)
             ss<-ss+r
     }
print(ss)
}
}
check.2<-z2(3)
check.2


check.2<-z2(3)

[1] -2.213343 [1] -2.904235 [1] -0.01516304

check.2

[1] -0.01516304

the problem with z2 is that only the last value is saved.


what i could do is use matrices like the following: (but i dont want to do this AND WOULD PREFER TO USE list.)

z3<-function(w)
{
results.<-matrix(nrow=w,ncol=1)
colnames(results.)<-c("ss")
for (i in 1:w)
{
set.seed(i+6)
ss<-0
     for (j in 1:5)
     {
             set.seed(j+1+(i-1)*6)
             r<-rnorm(1)
             ss<-ss+r
     }
results.[i,1]<-ss
}
results.
}
check.3<-z3(3)
check.3


check.3

ss [1,] -2.21334260 [2,] -2.90423463 [3,] -0.01516304

what if i have a new program (something different) and i want the
following:

j=1
$a
1
2
3

$b
1
2
3
4
5

$c
1


############### j=2 $a 11 21 31

$b
11
21
31
41
51

$c
11

###############
j=3
$a
21
22
32

$b
21
22
32
42
52

$c
21

MATRICES SEEMS TO BE A GOOD WAY OF DOING THIS (but then you would have
to set up three matrices, one for a,b and c). BUT WHAT IF I WANT TO USE
THE LIST FUNCTION? i.e. there is a list in the first loop that i want to
display!

sorry for the long mail.

***
ALLAN
______________________________________________ R-help@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


------------------------------------------------------------------------

______________________________________________
R-help@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

______________________________________________ R-help@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

Reply via email to