我有两个清单;它们都包含 gpc.poly 类的多边形。
第一个列表是“ptareas”:
> ptareas
$AG00035
GPC Polygon
Num. Contours: 1
Num. Vertices: 2000
BBox (X): 5.999999 --> 6.000001
BBox (Y): 11 --> 11
$AG00036
GPC Polygon
Num. Contours: 1
Num. Vertices: 2000
BBox (X): 9.999999 --> 10
BBox (Y): 4.999999 --> 5.000001
第二个列表是“isect_polys”:
> isect_polys
[[1]]
GPC Polygon
Num. Contours: 2
BBox (X): 4.928932 --> 25.07107
BBox (Y): -2.071068 --> 25.07107
[[2]]
GPC Polygon
Num. Contours: 1
Num. Vertices: 1028
BBox (X): 4.928932 --> 11.23867
BBox (Y): 3.953478 --> 12.02995
[[3]]
GPC Polygon
Num. Contours: 2
BBox (X): 4.928932 --> 25.07107
BBox (Y): -2.071068 --> 25.07107
[[4]]
GPC Polygon
Num. Contours: 1
Num. Vertices: 1028
BBox (X): 4.928932 --> 11.23867
BBox (Y): 3.953478 --> 12.02995
[[5]]
GPC Polygon
Num. Contours: 2
BBox (X): 4.928932 --> 25.07107
BBox (Y): -2.071068 --> 25.07107
[[6]]
GPC Polygon
Num. Contours: 1
Num. Vertices: 1028
BBox (X): 4.928932 --> 11.23867
BBox (Y): 3.953478 --> 12.02995
我正在尝试(并且失败)做的事情非常简单。我想将 ptareas 中的每个多边形与 isect_polys 中的每个多边形相交。实际上,每次我运行脚本时,每个列表的长度都会有所不同,但对于这个例子,我试图找到一种方法来自动化以下操作:
intersect(ptareas[[1]],isect_polys[[1]])
intersect(ptareas[[1]],isect_polys[[2]])
intersect(ptareas[[1]],isect_polys[[3]])
intersect(ptareas[[1]],isect_polys[[4]])
intersect(ptareas[[1]],isect_polys[[5]])
intersect(ptareas[[1]],isect_polys[[6]])
intersect(ptareas[[2]],isect_polys[[1]])
intersect(ptareas[[2]],isect_polys[[2]])
intersect(ptareas[[2]],isect_polys[[3]])
intersect(ptareas[[2]],isect_polys[[4]])
intersect(ptareas[[2]],isect_polys[[5]])
intersect(ptareas[[2]],isect_polys[[6]])
如果我正在处理矩阵,我只需将 ptareas 设为单列矩阵,将 isect_polys 设为单行矩阵,然后执行类似于下面的矩阵乘法的操作:
> m1<- matrix(c(1,2),2,1)
> m1
[,1]
[1,] 1
[2,] 2
> m2<- matrix(c(1:6),1,6)
> m2
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 3 4 5 6
> m1 %*% m2
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 3 4 5 6
[2,] 2 4 6 8 10 12
不幸的是,我不能强迫 r 让我以同样的方式处理多边形列表,所以我希望有人可以解释如何使用其中一个 apply 函数来实现相同类型的成对交互。作为一个新手用户,在处理多个列表时,我发现这些功能很难实现。由于我在以前的帖子中找不到类似的例子,其他人一定能够轻松解决类似的两个列表问题,而且我相当肯定我错过了一些非常基本的东西。任何帮助将不胜感激。