Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中使用方括号的空间逆子集_R_Spatial_Rgeo Shapefile - Fatal编程技术网

R中使用方括号的空间逆子集

R中使用方括号的空间逆子集,r,spatial,rgeo-shapefile,R,Spatial,Rgeo Shapefile,我有一个空间点数据框->空间点 和一个多边形->空间多边形 我可以使用 subset_within <- spatial_points[spatial_poly,] which is nice and intuitive. 在这个简单的示例中,可以使用gDifference(),它在本示例中起作用。但是,我的SpatialPointDataframe非常大,使用GDDifference会使R崩溃。当您在R中执行df[2,1]时,您实际上是在调用一个函数。函数是'['(df,1,2)。只

我有一个空间点数据框->空间点

和一个多边形->空间多边形

我可以使用

subset_within <- spatial_points[spatial_poly,]  which is nice and intuitive.

在这个简单的示例中,可以使用
gDifference()
,它在本示例中起作用。但是,我的SpatialPointDataframe非常大,使用GDDifference会使R崩溃。

当您在R中执行
df[2,1]
时,您实际上是在调用一个函数。函数是
'['(df,1,2)
。只是解析器对您隐藏了这一点,这允许您以更自然的方式编写代码

如果您仔细考虑一下,
[
运算符根据您使用的对象类型执行不同的操作,即使这些操作在概念上是相似的。返回数值向量子集的实际代码与返回矩阵或列表子集的代码不同。事实上,R中有一些对象调用
[
函数没有意义,也没有实现。例如,如果您尝试在函数名上调用它:

print[1]
#>打印[1]时出错:“closure”类型的对象不可子集
如果在R中创建一个包含各种不同成员的复杂新类,则需要定义
[
操作符的意思是,您需要实现它。用
空间多边形
类来子集
空间点
类意味着什么?R自己无法知道这一点,因此当
sp
包的作者创建
空间多边形
类时,他必须编写完成子集基的方法在传递给运算符
[
的操作数上,可以看到源代码

如果您对逻辑进行跟踪,您将看到在
spdf[poly1,]
的情况下,子集是由其他空间函数的使用决定的,可以归结为

哪个(!is.na(在(spdf,几何体(poly1))之上)
#> 39 40 41 50 51 52 61 62 63 
#> 39 40 41 50 51 52 61 62 63
然后,这些数值子集被用于对实际多边形进行子集划分,以返回一个仅由子集组成的新对象。这意味着我们可以以类似的方式获得外部的
点。\u

points_within  <- spdf[poly1,] 
points_outside <- spdf[which(is.na(over(spdf, geometry(poly1))))]

plot(spdf)
plot(poly1, add = TRUE)
plot(points_within, col="blue", pch = 16, add = TRUE)
plot(points_outside, col="red", pch = 16, add = TRUE)
当然,单独将
-
操作符应用于
空间点
对象是没有意义的。从何处取点

事实上,可以这样编写函数,但这需要一点复杂的非标准评估。你可以在GitHub页面上以功能请求的形式提交它,但我个人很乐意使用上面的函数


我希望这能让事情变得更清楚。

当你在R中执行
df[2,1]
时,你实际上是在调用一个函数。这个函数是
'['(df,1,2)
。只是解析器对你隐藏了这一点,这允许你以更自然的方式编写代码

如果您仔细考虑一下,
[
运算符根据您使用的对象类型执行不同的操作,即使这些操作在概念上是相似的。返回数值向量子集的实际代码与返回矩阵或列表子集的代码不同。事实上,R中有一些对象调用
[
函数没有意义,也没有实现。例如,如果您尝试在函数名上调用它:

print[1]
#>打印[1]时出错:“closure”类型的对象不可子集
如果在R中创建一个包含各种不同成员的复杂新类,则需要定义
[
操作符的意思是,您需要实现它。用
空间多边形
类来子集
空间点
类意味着什么?R自己无法知道这一点,因此当
sp
包的作者创建
空间多边形
类时,他必须编写完成子集基的方法在传递给运算符
[
的操作数上,可以看到源代码

如果您对逻辑进行跟踪,您将看到在
spdf[poly1,]
的情况下,子集是由其他空间函数的使用决定的,可以归结为

哪个(!is.na(在(spdf,几何体(poly1))之上)
#> 39 40 41 50 51 52 61 62 63 
#> 39 40 41 50 51 52 61 62 63
然后,这些数值子集被用于对实际多边形进行子集划分,以返回一个仅由子集组成的新对象。这意味着我们可以以类似的方式获得外部的
点。\u

points_within  <- spdf[poly1,] 
points_outside <- spdf[which(is.na(over(spdf, geometry(poly1))))]

plot(spdf)
plot(poly1, add = TRUE)
plot(points_within, col="blue", pch = 16, add = TRUE)
plot(points_outside, col="red", pch = 16, add = TRUE)
当然,单独将
-
操作符应用于
空间点
对象是没有意义的。从何处取点

事实上,可以这样编写函数,但这需要一点复杂的非标准评估。你可以在GitHub页面上以功能请求的形式提交它,但我个人很乐意使用上面的函数


我希望这能让事情变得更清楚。

嗨,你能告诉我们你在使用哪些软件包吗?如果你在软件包
sp
中创建一个
SpatialPointsDataFrame
,在
sp
中创建一个
Polygon
,那么
spatial\u points[spatial\u,]
就会抛出一个错误。你可以添加
dput(spatial\u points)的结果吗
dput(spatical_poly)
回答您的问题?谢谢。事实上,您所描述的是有效的。是的,使用sp,但也使用rgdal和光栅。创建点文件时使用坐标(),以及我从外部源导入的形状文件。两者都使用spTransform进行转换。我运行了dput()在这两个文件上,我得到一个非常长的ascii文件-你能告诉我我应该寻找什么吗?也许你可以展示一个最小的例子(即,通过坐标生成多边形,通过坐标生成一些点,以再现行为)@Allan Cameron example补充道。谢谢。有关完整的解释,请参阅我的答案。嗨。可以吗
points_within  <- spdf[poly1,] 
points_outside <- spdf[which(is.na(over(spdf, geometry(poly1))))]

plot(spdf)
plot(poly1, add = TRUE)
plot(points_within, col="blue", pch = 16, add = TRUE)
plot(points_outside, col="red", pch = 16, add = TRUE)