Dear Berend,

For reproducibility,
Rspatswap() is a function which originally returns a single value. For example Rspatswap(...) and you get 0.8

So, run Rspatswap() 20 times and store all the values.
Then from these 20 values, calculate the calculate average, sd,se,min,max to get something similar to:

        average           sd           se       min      max
trace 0.8880286 0.0009178193 0.0004589096 0.8870152 0.889241

If we repeat the function 10 times, then I expect 10 rows with 5 columns but it 
does not work ?

I hope I am now clearer...







On 6/7/2013 5:24 AM, Berend Hasselman wrote:
On 07-06-2013, at 10:59, Laz <lmra...@ufl.edu> wrote:

Dear R users,

I am stuck here: My first function returns a vector of 5 values.
In my second function, I want to repeat this, a number of times, say 10
so that I have 10 rows and five columns but I keep on getting errors.

See the code and results below:

optm <-function(perm, verbose = FALSE)
{
   trace<-c()
   for (k in 1:perm){
trace[k]<-Rspatswap(rhox=0.6,rhoy=0.6,sigmasqG=0.081,SsqR=1)[1]
     perm[k]<-k
     mat<-cbind(trace, perm = seq(perm))
   }
   if (verbose){
     cat("***starting matrix\n")
     print(mat)
   }
   # iterate till done
   while(nrow(mat) > 1){
     high <- diff(mat[, 'trace']) > 0
     if (!any(high)) break  # done
     # find which one to delete
     delete <- which.max(high) + 1L
     mat <- mat[-delete, ]
     newmat<-apply(mat,2,mean)[1]
     sdm<-sd(mat[,1])
     sem<-sdm/sqrt(nrow(mat))
     maxv<-mat[1,1]
     minv<-mat[nrow(mat),1]
       }
   stats<-cbind(average=newmat,sd=sdm,se=sem,min=minv,max=maxv)
   stats
}

test<-optm(perm=20)
test
         average           sd           se       min      max
trace 0.8880286 0.0009178193 0.0004589096 0.8870152 0.889241


itn<-function(it){
siml<-matrix(NA,ncol=5,nrow=length(it))
   for(g in 1:it){
    siml[g]<-optm(perm=20)
   }
siml<-cbind(siml=siml)
siml
}

ans<-itn(5)
Warning messages:
1: In siml[g] <- optm(perm = 20) :
   number of items to replace is not a multiple of replacement length
2: In siml[g] <- optm(perm = 20) :
   number of items to replace is not a multiple of replacement length
3: In siml[g] <- optm(perm = 20) :
   number of items to replace is not a multiple of replacement length
4: In siml[g] <- optm(perm = 20) :
   number of items to replace is not a multiple of replacement length
5: In siml[g] <- optm(perm = 20) :
   number of items to replace is not a multiple of replacement length
ans
           [,1]      [,2]      [,3]      [,4]      [,5]
[1,] 0.8874234 0.8861666 0.8880521 0.8870958 0.8876469


1. Not reproducible code. Where does function Rspatswap come from?

2. You have several errors in function itn:
     Argument it is a scalar: length(it) is 1. You need to do siml <- 
matrix(NA,ncol=5,nrow=it)
Next in the g-loop you want to fill row g so do: siml[g,] <- …..

Finally why are you doing siml <- cbind(siml=siml)?
Seems superfluous to me. Delete the line.

Berend



______________________________________________
R-help@r-project.org mailing list
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.

Reply via email to