On Mon, 24 Oct 2005, Leaf Sun wrote:
Running R 2.2.0 on winXP. Computer P4 CPU 3.2G and 1G of RAM.
Please try the attached Windows binary package. Look at the help page for
ann.dist(). It returns a list of three elements, the first, lnn, gives the
index numbers of the neighbours closer than maxdist. From there say you
have a vector z where you want the neighbour relation to apply only when
z[i] < z[j], so
res <- ann.dist(pts, maxdist=md)
glist <- vector(mode="list", length=length(res$lnn))
for (i in seq(along=res$lnn)) {
if (length(res$lnn[[i]]) > 0) {
glist[[i]] <- ifelse(z[i] < z[res$lnn[[i]]], 1, 0)
}
}
so glist tells you which to drop. Alternatively, you can drop them
straight away:
res <- ann.dist(pts, maxdist=md)
glist <- vector(mode="list", length=length(res$lnn))
for (i in seq(along=res$lnn)) {
if (length(res$lnn[[i]]) > 0) {
glist[[i]] <- res$lnn[[i]]][z[i] < z[res$lnn[[i]]]]
}
}
(neither of these are tried, so the brackets may not match).
Please let me know how you get on.
Roger
======= At 2005-10-24, 09:46:28 you wrote: =======
On Mon, 24 Oct 2005, Leaf Sun wrote:
No, I mean I have to find the neighbors of 200,000 points.
Your R version and OS - output of version on your machine?
Roger
======= At 2005-10-24, 03:30:41 you wrote: =======
On Fri, 21 Oct 2005, Leaf Sun wrote:
Roger,
The data frame is of 200,000 by 15 elements.
Do you mean that you need to find distances in 15 dimensions?
Roger
I've learned some C, long time ago. But I guess I would understand the C codes. Thanks!
Leaf
======= At 2005-10-21, 14:11:38 you wrote: =======
On Fri, 21 Oct 2005, Leaf Sun wrote:
Dear all,
I got point data of trees. I was wondering if anybody has experience in searching the neighbors within a specified distance efficiently.
X Y Z
99 34 65
98 35 29
98 34 28
99 33 33
98 32 23
99 33 21
99 33 22
99 32 24
99 30 23
...
What I want to do is : searching for the neighbors with a distance R
for each tree & the neighbor must have a bigger Z.
The data set is huge so the R-codes is working slowly when I search it
without subset it.
And huge is how big? For very large problems, you'll need a kd-tree or
r-tree approach to divide up the point locations before making the spatial
query (I think the retention of neighbours with a larger z is the final
step). There do not seem to be such functions in R or contributed packages
at present. If you are willing to collaborate, I can pass on a draft
package corrected by Christian Sangiorgio for approximate nearest
neighbours (an interface to ANN by David Mount and collaborators), but it
isn't working yet. So an investment in time and some knowledge of C++ will
be useful.
Any suggestion would be much appreciated!
Leaf
--
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no
= = = = = = = = = = = = = = = = = = = =