G'day, I have a matrix 20000 x 500 populated with all the distances between a list of airports and a list of towers. What I'm having trouble doing is finding the closest airport to each tower, Any help would be greatly appreciated. Regards, Michael Williams [[alternative HTML version deleted]]
Williams, Michael wrote:> G'day, I have a matrix 20000 x 500 populated with all the distances > between a list of airports and a list of towers. What I'm having trouble > doing is finding the closest airport to each tower, Any help would be > greatly appreciated. > > Regards, > Michael WilliamsSounds like you want to apply the function which.min to the rows of the matrix. See ?apply and ?which.min
> -----Original Message----- > From: r-help-bounces at stat.math.ethz.ch > [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of > Williams, Michael > Sent: Monday, April 18, 2005 1:58 AM > To: r-help at stat.math.ethz.ch > Subject: [R] Minimum distance > > > G'day, I have a matrix 20000 x 500 populated with all the > distances between a list of airports and a list of towers. > What I'm having trouble doing is finding the closest airport > to each tower, Any help would be greatly appreciated.Try: ( M <- matrix( rnorm( 24 ), 8, 3 ) ) rownames( M ) <- 1:8 ( wh <- sweep( M, 2, apply( M, 2, min ), "==" ) ) rownames(M)[ row( wh )[wh] ] It works in finite time even with M of 20000 by 500 but it breaks down if there is more than one minimum per column. Bendix Carstensen ---------------------- Bendix Carstensen Senior Statistician Steno Diabetes Center Niels Steensens Vej 2 DK-2820 Gentofte Denmark tel: +45 44 43 87 38 mob: +45 30 75 87 38 fax: +45 44 43 07 06 bxc at steno.dk www.biostat.ku.dk/~bxc ----------------------> > Regards, > Michael Williams > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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 >
Since it is not clear exactly what you require, I have assumed that what you are looking for is the minimum value for each row or column depending upon which is airports and which is the towers. Is this what you are looking for x <- runif(100) dim(x) <- c(5,20) apply(x,1,function(y) which(y == min(y))) The only issue I see here is that there may be more than one minimim in which case the value returned will be a list with all of the matched values which would need to be processed x <- trunc(runif(100) * 10) dim(x) <- c(5,20) apply(x,1,function(y) which(y == min(y))) If you did not have a method for processing you could order the towers in some preferred order and just take the first match apply(x,1,function(y) head(which(y == min(y)),1)) If you are talking about a matrix where you need to find the shortest path, you might want to look at the package e1071. I think the function is called allShortestPaths Tom> -----Original Message----- > From: r-help-bounces at stat.math.ethz.ch > [mailto:r-help-bounces at stat.math.ethz.ch]On Behalf Of > Williams, Michael > Sent: Monday, 18 April 2005 7:58 AM > To: r-help at stat.math.ethz.ch > Subject: [R] Minimum distance > > > G'day, I have a matrix 20000 x 500 populated with all the distances > between a list of airports and a list of towers. What I'm > having trouble > doing is finding the closest airport to each tower, Any help would be > greatly appreciated. > > Regards, > Michael Williams > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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 >