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 <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 > > [[alternative HTML version deleted]]
______________________________________________ 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.