В комментариях есть множество правильных ответов с использованием числовых индексов.Вот еще одно:
my.list2 <- my.list[ ! #negation operator
names(my.list) %in% c('d2','d3','d6') ] #logical index
#check
> my.list2
$d1
y1 y2
1 1 4
2 2 5
3 3 6
$d4
y1 y2
1 3 6
2 2 5
3 1 4
$d5
y1 y2
1 1 4
2 2 5
3 3 6
Причина, по которой ваша попытка не удалась, состоит в том, что последовательность значений в my.list
изменилась, как только вы удалили первый элемент.Обратите внимание, что я назначил другой именованный элемент.Это гораздо более безопасная стратегия.
Причина, по которой я добавил демонстрацию логической схемы индексации, заключается в ее превосходящей универсальности.Вместо этого вы можете определить критерий, который вы можете использовать для каждого элемента по очереди, используя sapply
.Логический вектор, который в результате может быть использован как вектор выбора.
Пример для тестирования:
dput(my.list)
list(d1 = structure(list(y1 = 1:3, y2 = 4:6), class = "data.frame", row.names = c("1",
"2", "3")), d2 = structure(list(y1 = 3:1, y2 = 6:4), class = "data.frame", row.names = c("1",
"2", "3")), d3 = structure(list(y1 = 1:3, y2 = 4:6), class = "data.frame", row.names = c("1",
"2", "3")), d4 = structure(list(y1 = 3:1, y2 = 6:4), class = "data.frame", row.names = c("1",
"2", "3")), d5 = structure(list(y1 = 1:3, y2 = 4:6), class = "data.frame", row.names = c("1",
"2", "3")), d6 = structure(list(y1 = 3:1, y2 = 6:4), class = "data.frame", row.names = c("1",
"2", "3")))