Hello,

I have 2 functions (a and b)

a = function(n) { matrix (runif(n*2,0.0,1), n) }
>
>
> b = function (m, matrix) {
>         n=nrow (matrix)
>         p=ceiling (n/m)
>         lapply (1:p, function (l,n,m) {
>                         inf = ((l-1)*m)+1
>                         if (l<p) sup=((l-1)*m)+m
>                                 else sup=n
>                         data.frame (matrix (lapply (inf: sup, function(i)
> c(i, Inf, matrix[i,1], matrix[i,2]) ), nrow=m ) )
>                 }, n=n, m=m
>         )
> }
>
> >my.matrix = a(7)
> >my.matrix
>             [,1]      [,2]
> [1,] 0.708060983 0.3242221
> [2,] 0.356736311 0.1454096
> [3,] 0.402880340 0.4763676
> [4,] 0.795947223 0.4052168
> [5,] 0.001620093 0.2618591
> [6,] 0.192215589 0.6595275
> [7,] 0.539199304 0.5402015
>
> > b (m=6,matrix=my_matrix)
> [[1]]
>   matrix.lapply.inf.sup..function.i..c.i..Inf..matrix.i..1...matrix.i..
> 1                                  1.0000000, Inf, 0.7080610, 0.3242221
> 2                                  2.0000000, Inf, 0.3567363, 0.1454096
> 3                                  3.0000000, Inf, 0.4028803, 0.4763676
> 4                                  4.0000000, Inf, 0.7959472, 0.4052168
> 5                            5.000000000, Inf, 0.001620093, 0.261859077
> 6                                  6.0000000, Inf, 0.1922156, 0.6595275
>
> [[2]]
>   matrix.lapply.inf.sup..function.i..c.i..Inf..matrix.i..1...matrix.i..
> 1                                  7.0000000, Inf, 0.5391993, 0.5402015
> 2                                  7.0000000, Inf, 0.5391993, 0.5402015
> 3                                  7.0000000, Inf, 0.5391993, 0.5402015
> 4                                  7.0000000, Inf, 0.5391993, 0.5402015
> 5                                  7.0000000, Inf, 0.5391993, 0.5402015
> 6                                  7.0000000, Inf, 0.5391993, 0.5402015
>

It seems like the second list is filled with repeated rows (from 2 to 6)
I would like the second list to stop in the last row of the my_matrix
So, I would like to have the following result:
> b (m=6,matrix=my_matrix)
[[1]]
  matrix.lapply.inf.sup..function.i..c.i..Inf..matrix.i..1...matrix.i..
1                                  1.0000000, Inf, 0.7080610, 0.3242221
2                                  2.0000000, Inf, 0.3567363, 0.1454096
3                                  3.0000000, Inf, 0.4028803, 0.4763676
4                                  4.0000000, Inf, 0.7959472, 0.4052168
5                            5.000000000, Inf, 0.001620093, 0.261859077
6                                  6.0000000, Inf, 0.1922156, 0.6595275

[[2]]
  matrix.lapply.inf.sup..function.i..c.i..Inf..matrix.i..1...matrix.i..
1                                  7.0000000, Inf, 0.5391993, 0.5402015


Can`t I do this with an apply function? Is there any more efficient way
that substituting the lapply by a for loop?

THanks,
Rui

        [[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.

Reply via email to