[R] applying a function to output a matrix

Lara Poplarski
Tue, 25 Jan 2011 17:01:00 -0000

Dear List,

I am using function distCosine from package geosphere to a list of lat/lon
coordinates, and I want to calculate the great circle distance between a
pair of coordinates in the list and all other pairs --- essentially, the
output should be a matrix. I have been able to achieve this with two nested
loops, as in the example below, but this is rather slow. Can someone please
suggest how to do this with "apply" or similar?

Many thanks,
Lara


install.packages("geosphere")

library(geosphere)


##generate sets of random points

n   <- 100

lon <- runif(n, -180, 180)

lat <- runif(n, -90, 90)


#package geosphere

##spherical law of cosines method

dCos <- matrix( , nrow = length(lon), ncol = length(lat))

for (i in 1:length(lon)) {

  for (j in 1:length(lat)) {

    dCos[[i,j]] <- distCosine(matrix(c(lon[i], lat[i]), ncol=2), matrix(c(
lon[j], lat[j]), ncol=2))

}}

	[[alternative HTML version deleted]]