我有一个列表来自一个空间多边形数据框,该数据框现在大多数条目只有一个元素。但是,其中一些每行包含2个或有时3个区域(每行是一个多边形,其他区域通常是供参考的孔)。该列表看起来类似于:
arealist =
Name Type Value
arealist list[120] List of length 120
[[1]] double[1] 0.0007
[[2]] double[1] 0.00043
[[3]] double[1] 0.0006
[[4]] double[1] 0.0002
[[5]] double[1] 0.00012 0.0023
[[6]] double[1] 0.0007
如您所见,第5行列出了2个区域,其余的列出了一个区域。我尝试了以下方法:
arealist[length>1]
"Error in length > 1 :
comparison (6) is possible only for atomic and list types"
但是我的文件区域列表的标题为“列表[120]”,它是120个元素的列表。我经历了一下,看看它是否被认为是矩阵或向量,并说向量或矩阵:
is.matrix(arealist)
# [1] FALSE
is.vector(arealist)
# [1] TRUE
我也尝试过:
grep('[length(arealist)>1]',arealist)
刚刚列出了行索引1到120。
which(length(arealist[[1:NROW(arealist)]])>1)
# Error in arealist[[1:NROW(arealist)]] :
# recursive indexing failed at level 2
which(length(arealist[[1:120]])>1)
# Error in arealist[[1:120]] : recursive indexing failed at level 2
which(length(arealist[[1:120,]])>1)
# Error in arealist[[1:120, ]] : incorrect number of subscripts
which(length(arealist[[1]])>1)
# integer(0)
which(length(arealist[[112]])>1)
# [1] 1
在我的实际区域列表中,有4个实例存在多个区域,因此0和1都不正确。有什么想法吗?谢谢
PS,这是我之前获取多边形区域的列表的方式:
arealist <-sapply(slotly(slot(poly,“ polygons”),function(x)sapply(slot(x,“ Polygons”),slot,“ area”))
flatarea <-取消列表(arealist,use.names = FALSE)#flatten列表
maxareatf <-扁平区> 0.02#仅给出正确/错误答案
maxareaidx <-which(maxareatf == TRUE)#其面积大于阈值
maxareaidx <-as.numeric(maxareaidx)#make数字类
maxareasub =子集(flatarea,flatarea []> 0.02)#subset那些具有大于阈值的区域
maxarea = data.frame(maxareaidx,maxareasub)#建立索引和大于阈值的区域的矩阵
输出具有区域插槽,但是它们可以包含多个区域,所以同样。