大家早上好,
我有一个非常简单的问题。
foo <- list(bar=2)
众所周知,我可以使用括号或使用cashtag($)符号访问bar
对象。
> foo$bar
[1] 2
> foo[["bar"]]
[1] 2
如果我将bar
替换为ba
,我将使用cashtag($)获得相同的结果,但使用括号不同的结果。
> foo$ba
[1] 2
> foo[["ba"]]
NULL
在这种情况下,是否可以使用cashtag($)获取结果NULL
而不是2
?
答案 0 :(得分:4)
我不相信它可以让它返回NULL ,除非列表中还有其他东西也与输入部分匹配。因此,如果列表中有一个名为bak的元素,那么foo $ ba将返回null,因为部分匹配并不是唯一的。
> foo <- list(bar=2)
> foo$ba
[1] 2
> foo$bak <- NA
> foo$ba
NULL
如果/当发生部分匹配时,您也可以打开一个选项以发出警告。
> options(warnPartialMatchDollar = TRUE)
> foo <- list(bar = 2)
> foo$ba
[1] 2
Warning message:
In foo$ba : partial match of 'ba' to 'bar'
但是你可以看到它仍然返回部分匹配的值。如果你希望它在部分匹配的情况下返回NULL,那么我建议使用[[
而不是$
,一般来说,使用{{1}可能更好一点无论如何。
答案 1 :(得分:2)
我刚刚找到了使用@Dason帮助的方法。
import requests
from shapely.geometry import mapping, shape
from shapely.prepared import prep
from shapely.geometry import Point
data = requests.get("https://raw.githubusercontent.com/datasets/geo-countries/master/data/countries.geojson").json()
countries = {}
for feature in data["features"]:
geom = feature["geometry"]
country = feature["properties"]["ADMIN"]
countries[country] = prep(shape(geom))
print(len(countries))
def get_country(lon, lat):
point = Point(lon, lat)
for country, geom in countries.iteritems():
if geom.contains(point):
return country
return "unknown"
print(get_country(10.0, 47.0))
# Austria
这对我的需求来说很好。
谢谢您的提示!