У меня есть список объектов SpatialLinesDataFrame, и я хочу удалить элементы списка, у которых значение содержит столбец data.frame, равный одному из значений в простом числовом векторе.Я хочу повторить этот процесс, поскольку фактический список огромен.Вот упрощенный пример данных с циклом, который не выполняет то, что я хочу, чтобы он делал:
#create list of single-feature SpatialLineDataFrame
library(raster)
l1 <- cbind(c(0,3), c(0,3))
l2 <- cbind(c(0, 13), c(0, 1))
l3 <- cbind(c(0, 24), c(0,22.5))
l4 <- cbind(c(0, 1), c(0,13))
l5 <- cbind(c(0, 6), c(0,6))
Sldf <- spLines(l1, l2, l3, l4, l5, attr=data.frame(lineID=1:5))
linel <- lapply(1:5, function(i) Sldf[i,])
#numeric vector
x <- c(1,3,5)
newlist <- list()
for (i in 1:length(linel)){
if (linel[[i]]@data$lineID == x) {
newlist[[i]] <- linel[[i]]
}
}
Я получаю следующее сообщение об ошибке:
Предупреждение: 1: Вif (linel [[i]] @ data $ lineID == x) {: условие имеет длину> 1, и будет использоваться только первый элемент
Но я хочу удалить списокэлементы с lineID == 1 или 3 или 5 (только совпадают с индексом # в примере) из списка и заканчиваются на:
newlist
[[1]]
class : SpatialLinesDataFrame
features : 1
extent : 0, 13, 0, 1 (xmin, xmax, ymin, ymax)
coord. ref. : NA
variables : 1
names : lineID
value : 2
[[2]]
class : SpatialLinesDataFrame
features : 1
extent : 0, 13, 0, 1 (xmin, xmax, ymin, ymax)
coord. ref. : NA
variables : 1
names : lineID
value : 4