首页 > 解决方案 > 多个邮政编码的 zipRadius 函数

问题描述

谁能帮我把这个函数zipRadius放在一个循环中?

此函数用于识别特定邮政编码半径内的所有邮政编码。当单个邮政编码通过该函数时,该函数运行良好。对于多个邮政编码,它似乎根本不起作用。请参阅下面我尝试过的内容:

尝试#1

install.packages("ZipRadius")

library(ZipRadius)

zipRadius(c("99501", "90210"), 3)

尝试#2

install.packages("ZipRadius")

library(ZipRadius)

x <- c("30316", "66061")

for (i in seq_along(x)) {
  c <-zipRadius(x[i], 3.5)
}

标签: rfunctionloops

解决方案


我不相信zipRadius是矢量化的,并且可能会忽略矢量中提供的多个邮政编码(对于尝试#1)。

您的循环有效,但是您c用第二个zipRadius电话覆盖了您的循环。

如果您想要一个包含所有结果的数据框,您可以将第二个数据框附加到第一个数据框,并用于rbind组合它们。

library(ZipRadius)

x <- c("30316", "66061")

mylist = list()

for (i in seq_along(x)) {
  mylist[[i]] <- zipRadius(x[i], 3.5)
}

do.call(rbind, mylist)

输出

     zip            city state latitude longitude Distance
1  30303         Atlanta    GA 33.75286 -84.39013     3.26
2  30307         Atlanta    GA 33.76821 -84.33786     2.68
3  30312         Atlanta    GA 33.74574 -84.37640     2.33
4  30315         Atlanta    GA 33.70960 -84.38365     2.82
5  30316         Atlanta    GA 33.72951 -84.34087     0.00
6  30317         Atlanta    GA 33.75001 -84.31854     1.91
7  30335         Atlanta    GA 33.75241 -84.38968     3.22
8  31120         Atlanta    GA 33.74000 -84.38000     2.36
9  66051          Olathe    KS 38.89990 -94.83199     1.45
10 66061          Olathe    KS 38.88978 -94.85558     0.00
11 66063          Olathe    KS 38.89990 -94.83199     1.45
12 66222 Shawnee Mission    KS 38.89990 -94.83199     1.45
13 66225 Shawnee Mission    KS 38.89990 -94.83199     1.45
14 66250 Shawnee Mission    KS 38.89990 -94.83199     1.45
15 66251 Shawnee Mission    KS 38.89990 -94.83199     1.45
16 66276 Shawnee Mission    KS 38.89990 -94.83199     1.45
17 66279 Shawnee Mission    KS 38.89990 -94.83199     1.45
18 66282 Shawnee Mission    KS 38.89990 -94.83199     1.45
19 66283 Shawnee Mission    KS 38.89990 -94.83199     1.45
20 66285 Shawnee Mission    KS 38.89990 -94.83199     1.45
21 66286 Shawnee Mission    KS 38.89990 -94.83199     1.45

或者您可以跳过循环,并使用lapply,您将在列表中获得结果:

lapply(x, zipRadius, 3.5)

输出

[[1]]
    zip    city state latitude longitude Distance
1 30303 Atlanta    GA 33.75286 -84.39013     3.26
2 30307 Atlanta    GA 33.76821 -84.33786     2.68
3 30312 Atlanta    GA 33.74574 -84.37640     2.33
4 30315 Atlanta    GA 33.70960 -84.38365     2.82
5 30316 Atlanta    GA 33.72951 -84.34087     0.00
6 30317 Atlanta    GA 33.75001 -84.31854     1.91
7 30335 Atlanta    GA 33.75241 -84.38968     3.22
8 31120 Atlanta    GA 33.74000 -84.38000     2.36

[[2]]
     zip            city state latitude longitude Distance
1  66051          Olathe    KS 38.89990 -94.83199     1.45
2  66061          Olathe    KS 38.88978 -94.85558     0.00
3  66063          Olathe    KS 38.89990 -94.83199     1.45
4  66222 Shawnee Mission    KS 38.89990 -94.83199     1.45
5  66225 Shawnee Mission    KS 38.89990 -94.83199     1.45
6  66250 Shawnee Mission    KS 38.89990 -94.83199     1.45
7  66251 Shawnee Mission    KS 38.89990 -94.83199     1.45
8  66276 Shawnee Mission    KS 38.89990 -94.83199     1.45
9  66279 Shawnee Mission    KS 38.89990 -94.83199     1.45
10 66282 Shawnee Mission    KS 38.89990 -94.83199     1.45
11 66283 Shawnee Mission    KS 38.89990 -94.83199     1.45
12 66285 Shawnee Mission    KS 38.89990 -94.83199     1.45
13 66286 Shawnee Mission    KS 38.89990 -94.83199     1.45

推荐阅读