Как я могу удалить элемент из списка? - PullRequest
227 голосов
/ 16 марта 2009

У меня есть список, и я хочу удалить из него один элемент. Как я могу это сделать?

Я попытался найти то, что, как мне кажется, явные названия для этой функции будут в справочном руководстве, и я не нашел ничего подходящего.

Ответы [ 15 ]

1 голос
/ 11 января 2018

В случае именованных списков я нахожу эти вспомогательные функции полезными

member <- function(list,names){
    ## return the elements of the list with the input names
    member..names <- names(list)
    index <- which(member..names %in% names)
    list[index]    
}


exclude <- function(list,names){
     ## return the elements of the list not belonging to names
     member..names <- names(list)
     index <- which(!(member..names %in% names))
    list[index]    
}  
aa <- structure(list(a = 1:10, b = 4:5, fruits = c("apple", "orange"
)), .Names = c("a", "b", "fruits"))

> aa
## $a
##  [1]  1  2  3  4  5  6  7  8  9 10

## $b
## [1] 4 5

## $fruits
## [1] "apple"  "orange"


> member(aa,"fruits")
## $fruits
## [1] "apple"  "orange"


> exclude(aa,"fruits")
## $a
##  [1]  1  2  3  4  5  6  7  8  9 10

## $b
## [1] 4 5
0 голосов
/ 27 октября 2018

если вы хотите избежать числовых индексов, вы можете использовать

a <- setdiff(names(a),c("name1", ..., "namen"))

для удаления имен namea...namen из. это работает для списков

> l <- list(a=1,b=2)
> l[setdiff(names(l),"a")]
$b
[1] 2

а также для векторов

> v <- c(a=1,b=2)
> v[setdiff(names(v),"a")]
b 
2
0 голосов
/ 26 августа 2017

Использование lapply и grep:

lst <- list(a = 1:4, b = 4:8, c = 8:10)
# say you want to remove a and c
toremove<-c("a","c")
lstnew<-lst[-unlist(lapply(toremove, function(x) grep(x, names(lst)) ) ) ]
#or
pattern<-"a|c"
lstnew<-lst[-grep(pattern, names(lst))]
0 голосов
/ 01 июля 2015

Как насчет этого? Опять же, используя индексы

> m <- c(1:5)
> m
[1] 1 2 3 4 5

> m[1:length(m)-1]
[1] 1 2 3 4

или

> m[-(length(m))]
[1] 1 2 3 4
0 голосов
/ 16 ноября 2012

Вы можете использовать which.

x<-c(1:5)
x
#[1] 1 2 3 4 5
x<-x[-which(x==4)]
x
#[1] 1 2 3 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...