Hello,
When you don't know what's going on, break long instructions into
simpler ones.
R is good at doing a lot in one line, to debug don't do that.
b = function (m, mat) {
n=nrow (mat)
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
lst <- lapply( inf:sup, function(i)
c(i, Inf, mat[i, 1], mat[i, 2]) )
data.frame( matrix(lst, nrow=length(lst)) )
#data.frame( matrix(unlist(lst), nrow=length(lst)) )
}, n=n, m=m
)
}
It returns a list of data.frames with 1 column only.
If you want 4 column data.frames, uncomment the instruction above (and
comment out the previuos one).
Hope this helps,
Rui Barradas
Em 11-09-2012 19:44, Rui Esteves escreveu:
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.
______________________________________________
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.