Re: [R] ugly loop

From: Bill Simpson <William.Simpson_at_drdc-rddc.gc.ca>
Date: Fri 22 Apr 2005 - 23:31:57 EST


Thanks Marc for your help.

> > The following code is slow and ugly:
> >
> > count<-0
> > for(i in 1:nrow(ver))
> > for(j in 1:ncol(ver))
> > {
> > count<-count+1
> > x[count]<-pt$x[ver[i,j]]
> > y[count]<-pt$y[ver[i,j]]
> > z[count]<-pt$z[ver[i,j]]
> > }
> >
> > Please help me make it better.
> >
> > Thanks!
>
> The following should work:
>
> > ver <- matrix(sample(1:16, 16), ncol = 4)
> > pt <- data.frame(x = sample(1:16, 16),
> + y = sample(1:16, 16),
> + z = sample(1:16, 16))
>
> > ver
> [,1] [,2] [,3] [,4]
> [1,] 8 9 5 13
> [2,] 14 16 1 10
> [3,] 12 2 11 7
> [4,] 6 3 4 15
> > pt
> x y z
> 1 6 15 15
> 2 9 2 3
> 3 11 1 5
> 4 14 4 10
> 5 13 7 14
> 6 1 14 7
> 7 15 10 4
> 8 10 5 12
> 9 4 12 2
> 10 8 8 13
> 11 16 11 1
> 12 7 13 9
> 13 2 16 11
> 14 3 9 16
> 15 5 6 8
> 16 12 3 6
>
> > x <- pt$x[ver]
> > y <- pt$y[ver]
> > z <- pt$z[ver]

This doesn't give the same results as my original code -- it scrambles the order.

OK I will explain my example.

pts contains the x, y, z coordinates of some 3D points. These points are the vertices of 3D triangles.

ver contains the indexes into pts.

each line of ver contains 3 vertices -- they are the corners of a triangle. For example, if line 1 of ver is 10 9 7
That means I need to draw a triangle whose coordinates are

pt$x[10],pt$y[10],pt$z[10]
pt$x[9],pt$y[9],pt$z[9]
pt$x[7],pt$y[7],pt$z[7]

Now it should be clear why the ordering is critical. I am using rgl.triangles() to plot. It requires the x,y,z coordinates in the order I gave in my original code.

Cheers
Bill



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Fri Apr 22 23:41:18 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:31:22 EST