there is a typo.

lapply(x.list, calcnorm, x.list)

should be

lapply(x.list, calcnorm2, x.list)

sorry.




2013/3/10 ishi soichi <soichi...@gmail.com>

> I need to develop a simple list manipulation. Although it seems easier to
> do it in matrix form, but I need it in list form.
>
> I have a matrix
>
> x <- matrix(c(12.1, 3.44, 0.1, 3, 12, 33.1, 1.1, 23), nrow=2)
>
> for list form example, the conversion is
>
> x.list <- lapply(seq_len(nrow(x)), function(i) x[i,])
>
>
> ### list version
> calcnorm=function(a, b){
>     diff <- mapply("-", a, b)
>     diff2 <- mapply("*", diff, diff)
>     sqrt.diff <-sqrt(sum(diff2))
>     return(sqrt.diff)
> }
> calcnorm2=function(a,X){
>     lapply(X, calcnorm, a)
> }
> lapply(x.list, calcnorm, x.list)
>
> [[1]]
> [[1]][[1]]
> [1] 0
>
> [[1]][[2]]
> [1] 31.75257
>
>
> [[2]]
> [[2]][[1]]
> [1] 31.75257
>
> [[2]][[2]]
> [1] 0
>
>
> ### matrix version
> calcnorm.const=function(a,b){
>     return(sqrt((a-b)%*%(a-b)))
> }
> calcnorm2.const=function(a,data){
>     apply(data,1,calcnorm.const,a)
> }
> apply(x,1,calcnorm2.const,x)
>
>          [,1]     [,2]
> [1,]  0.00000 31.75257
> [2,] 31.75257  0.00000
>
> Ideally, for later purposes, the list form of the output should be
> something like
>
> [[1]]
> [1,]  0 31.75257
> [[2]]
> [2,] 31.75257  0
>
> I am getting confused here. Could anyone help me out for the right output
> FORM?
>
> ishida
>

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