I have a matrix for which each row has 12 elements that represent the xyz coordinates of 4 points.
So each row of M is (x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4). Some points have NA as z values. 
I want another matrix to be the same as M but with the coordinates of those points with z=NA placed last. 
For ezample if z1=NA then the new matrix row should be  (x2,y2,z2,x3,y3,z3,x4,y4,z4,x1,y1,z1)
I've tried writing a function that does the job for each row and then apply to the matrix

Put.NaN.last<-function(p) {
Index<-c(which(!is.na(p[c(3,6,9,12)]))*3,which(is.na(p[c(3,6,9,12)]))*3)
p<-c(p[Index[1]-2],p[Index[1]-1],p[Index[1]],
p[Index[2]-2],p[Index[2]-1],p[Index[2]],
p[Index[3]-2],p[Index[3]-1],p[Index[3]],
p[Index[4]-2],p[Index[4]-1],p[Index[4]])
return(p)
}
A<-matrix(1:36,ncol=12)
A[c(7,9,17,36)]<-NA
A<-t(apply(A,1,Put.NaN.last))

but it is awfully slow.
Any suggestions on how to do this faster?
Thanks
Angel

	[[alternative HTML version deleted]]


