Hi,

I am almost getting there, but still have errors. Thanks for your help. 
I have tried improving but I get the following errors below:

>itn<-function(it){
+siml<-matrix(NA,ncol=5,nrow=it)
+for(g in 1:it){
+siml[g]<-optm(perm=20)[g]
+}
+siml
+}
>itn(3)
              [,1] [,2] [,3] [,4] [,5]
[1,] 0.8873775898   NA   NA   NA   NA
[2,] 0.0015584824   NA   NA   NA   NA
[3,] 0.0001414317   NA   NA   NA   NA


>itn<-function(it){
+siml<-matrix(NA,ncol=5,nrow=it)
+for(g in 1:it){
+siml[g]<-optm(perm=20)
+}
+siml
+}
>itn(3)
           [,1] [,2] [,3] [,4] [,5]
[1,] 0.8880941   NA   NA   NA   NA
[2,] 0.8869727   NA   NA   NA   NA
[3,] 0.8877045   NA   NA   NA   NA
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


I expect something close to

         average           sd          se       min       max
         0.8881969 0.0008215379 0.000410769 0.8873842 0.8890167

	0.884659 0.0004215379 0.000410769 0.2342 0.676307

	0.8885839 0.0001215379 0.0002112 0.000082752992 0.8836337




Thanks fpr you help.


On 6/7/2013 5:24 AM, Berend Hasselman wrote:
> On 07-06-2013, at 10:59, Laz <lmramba@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
>
>


	[[alternative HTML version deleted]]

