получить WithinDistance (rgeos), когда я хочу, чтобы параметр расстояния изменялся с идентификатором в byid - PullRequest
0 голосов
/ 15 октября 2018

Возможно, мне не хватает чего-то действительно простого, но я чувствую, что сегодня столкнулся со странным поведением gWithinDistance.

У меня есть два SpatialPointsDataFrames (cnty_ctr и ghcn.s).Объекты можно найти здесь: https://www.dropbox.com/preview/UCLA/within_multiple_D.RData?role=personal

Я пытаюсь определить, какие объекты в ghcn.s находятся на расстоянии от каждой точки в cnty_ctr.Уловка в том, что я хотел бы, чтобы расстояние в пределах, было специфичным для каждой точки в cnty_ctr (cnty_ctr$RADIUS2 было бы специфичным)Я пробовал это:

stn.r2 <- gWithinDistance(cnty_ctr, ghcn.s, dist = cnty_ctr$RADIUS2, byid = TRUE)

но я получаю на несколько больше ИСТИНЫ, чем должен был.

#i.e. I get this:               #when I should get this (only column 111 shown):

              067   083   111                 111
USC00040232  TRUE FALSE FALSE               FALSE
USC00041912  TRUE FALSE FALSE               FALSE
USC00043134  TRUE FALSE FALSE               FALSE
USC00044712  TRUE FALSE FALSE               FALSE
USC00047646  TRUE FALSE FALSE               FALSE
USW00023232  TRUE FALSE FALSE               FALSE
USW00023271  TRUE FALSE FALSE               FALSE
USC00041253 FALSE  TRUE FALSE               FALSE
USC00043402 FALSE  TRUE FALSE               FALSE
USC00046154 FALSE  TRUE  TRUE               FALSE
USC00047681 FALSE  TRUE FALSE               FALSE
USC00047902 FALSE  TRUE  TRUE               FALSE
USC00049111 FALSE  TRUE FALSE               FALSE
USW00023190 FALSE  TRUE FALSE               FALSE
USW00023273 FALSE  TRUE FALSE               FALSE
USW00093209 FALSE  TRUE FALSE               FALSE
USC00042941 FALSE FALSE  TRUE               FALSE
USC00044422 FALSE FALSE  TRUE                TRUE
USC00046399 FALSE FALSE  TRUE                TRUE
USC00046602 FALSE FALSE  TRUE               FALSE
USC00046940 FALSE FALSE  TRUE                TRUE
USC00048014 FALSE FALSE  TRUE               FALSE
USW00003159 FALSE FALSE  TRUE               FALSE
USW00023129 FALSE FALSE  TRUE               FALSE
USW00023136 FALSE FALSE  TRUE                TRUE
USW00023187 FALSE FALSE  TRUE                TRUE
USW00093111 FALSE FALSE  TRUE                TRUE
USW00093134 FALSE FALSE  TRUE               FALSE

Похоже, это потому, что gWithinDistance не принимает вектор.И использует какое-то значение вектора в качестве расстояния поиска (расстояния для ложных срабатываний больше, чем значение $ RADIUS2).Любая идея о том, что я могу использовать вместо этого?

1 Ответ

0 голосов
/ 16 октября 2018

Итак, вот работа, которую я придумал:

stn.r2 <-  lapply(seq_len(length(cnty_ctr@data$RADIUS2)), 
              function(i) gWithinDistance(cnty_ctr, ghcn.s, dist = cnty_ctr$RADIUS2[i], byid = T))
names(stn.r2) <- cnty_ctr@data$COUNTYFP

это не так легко читать / интуитивно понятно, как я надеялся, но оно выполняет свою работу.

...