# [R] loop not working my way

Sat Oct 19 23:03:08 CEST 2013

```Hello,

Seems simple.

fun <- function(n = 10){
matd <- matrix(sample(1:30,30, replace=FALSE), ncol=5, nrow=6)
res <- list(mat = NULL, Design_best = matd, Original_design = matd)
trace <- sum(diag(matd))
res\$mat <- rbind(res\$mat, c(trace = trace, iterations = 0))
for(i in seq_len(n)){
matd <- matrix(sample(1:30,30, replace=FALSE), ncol=5, nrow=6)
if(sum(diag(matd)) < trace){
trace <- sum(diag(matd))
res\$mat <- rbind(res\$mat, c(trace = trace, iterations = i))
res\$Design_best <- matd
}
}
res
}

fun()
fun(20)

Hope this helps,

Em 19-10-2013 18:41, laz escreveu:
> Dear R users,
>
> Suppose I want to randomly generate some data, in matrix form, randomly
> swap some of the elements and calculate trace of the matrix for each of
> these stages. If the value of trace obtained in the later is bigger than
> the former, drop the latter matrix and go back to the former matrix,
> swap some elements of the matrix again and calculate the trace. If the
> recent trace is smaller than the previous one, accept the matrix as the
> current .  Use the current matrix  and swap elements again. repeat the
> whole process for a number of times, say, 10. The output from the
> function should display only the original matrix and its value of trace,
> trace values of successful swaps and their iteration counts and the
> final best matrix that had the smallest value of trace, together with
> its trace value.
>
> For example
> ## original
>  > matd<-matrix(sample(1:30,30,replace=FALSE),ncol=5,nrow=6,byrow=FALSE)
>  > matd
>       [,1] [,2] [,3] [,4] [,5]
> [1,]   12   27   29   16   19
> [2,]   25   10    7   22   13
> [3,]   14   23    3   11   21
> [4,]   28    6    5    2   18
> [5,]   24   20    1   17   26
> [6,]    9    4   30    8   15
>  > trace<-sum(diag(matd))
>  > trace
> [1] 53
>
> #  1st iteration
>
>       [,1] [,2] [,3] [,4] [,5]
> [1,]   24   29   20   25   17
> [2,]   16    1   30    9    5
> [3,]   18   22    2   10   26
> [4,]   23   27   19   21   28
> [5,]   15    6    8    3   13
> [6,]   12   14    7   11    4
>  > trace<-sum(diag(matd))
>  > trace
> [1] 61
>
> ## drop this matrix because 61 >  53
>
> #  2nd iteration
>  > matd<-matrix(sample(1:30,30,replace=FALSE),ncol=5,nrow=6,byrow=FALSE)
>  > matd
>       [,1] [,2] [,3] [,4] [,5]
> [1,]    2   28   23   15   14
> [2,]   27    9   10   29    7
> [3,]    5   18   12    1   11
> [4,]    8    4   30   16   24
> [5,]   25   19   26    6   13
> [6,]   17   22    3   20   21
>  > trace<-sum(diag(matd))
>  > trace
> [1] 52
>
> ## accept this matrix because 52 < 53
>
> ### 3rd iteration
>  > matd<-matrix(sample(1:30,30,replace=FALSE),ncol=5,nrow=6,byrow=FALSE)
>  > matd
>       [,1] [,2] [,3] [,4] [,5]
> [1,]    1   29   17    8    6
> [2,]   21   23   10    7   14
> [3,]   22    4   12   26    9
> [4,]    3   13   11   30   15
> [5,]    5   24   18   16    2
> [6,]   20   25   19   27   28
>  > trace<-sum(diag(matd))
>  > trace
> [1] 68
>
> ## drop this matrix because 68 > 52
>
> ##  4th  iteration
>  > matd<-matrix(sample(1:30,30,replace=FALSE),ncol=5,nrow=6,byrow=FALSE)
>  > matd
>       [,1] [,2] [,3] [,4] [,5]
> [1,]    2    6    5   28   15
> [2,]    9   12   13   19   24
> [3,]    3   22   14   11   29
> [4,]   30   20   17    7   23
> [5,]   18   27   21    1   10
> [6,]   25   16    4    8   26
>  > trace<-sum(diag(matd))
>  > trace
> [1] 45
>
> ## accept this matrix because 45 < 52
>
> The final results will be:
> \$mat
>          trace    iterations
> [1,]       53        0
> [2,]       52        2
> [3,]       45        4
>
> \$ Design_best
>
>    [,1] [,2] [,3] [,4] [,5]
> [1,]    2    6    5   28   15
> [2,]    9   12   13   19   24
> [3,]    3   22   14   11   29
> [4,]   30   20   17    7   23
> [5,]   18   27   21    1   10
> [6,]   25   16    4    8   26
>
> \$ Original_design
>
>    [,1] [,2] [,3] [,4] [,5]
> [1,]   12   27   29   16   19
> [2,]   25   10    7   22   13
> [3,]   14   23    3   11   21
> [4,]   28    6    5    2   18
> [5,]   24   20    1   17   26
> [6,]    9    4   30    8   15
>
> Regards,
> Laz
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

```