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]] ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help