我有两个不同长度的对象列表list_shp_Forest_2000_Africa
和list_shp_Deforested_2000_Africa
。我只想保留list_shp_Forest_2000_Africa
中的list_shp_Deforested_2000_Africa
对象。常见的atrribute是Tile名称。我已经尝试了下面的代码行,但我无法得到我想要的东西。
list_shp_Forest_2000_Africa<- lapply(list_shp_Forest_2000_Africa, y=list_shp_Deforested_2000_Africa, function (x,y) {
remove(x[!x@data$Tile %in% y@data$Tile], list=ls())
})
有人对更好的方法有所了解吗?
答案 0 :(得分:1)
我不知道这会如何扩展到您的问题,但我会使用嵌套的sapply
调用。我不知道%in%
运算符来检查列表中的向量。
listOne <- lapply(1:10, FUN=function(x) seq(x))
listTwo <- lapply(9:10, FUN=function(x) seq(x))
oneInTwo <- sapply(listOne, FUN=function(x) {
as.logical(max(sapply(listTwo, FUN=function(y) identical(x, y))))
}
)
listThree <- listOne[oneInTwo]
listThree
产生以下结果。
> listThree
[[1]]
[1] 1 2 3 4 5 6 7 8 9
[[2]]
[1] 1 2 3 4 5 6 7 8 9 10
答案 1 :(得分:0)
根据Richard Herron的回答更新答案
ForestInDef <- sapply(list_shp_Forest_2000_Africa, function(x) {
as.logical(max(sapply(list_shp_Deforested_2000_Africa, function(y) identical(x@data$Tile[1], y@data$Tile[1]))))
}
)
list_shp_Forest_2000_Africa <- list_shp_Forest_2000_Africa[ForestInDef]