[r] 목록에서 요소를 제거하려면 어떻게해야합니까?

목록이 있고 단일 요소를 제거하고 싶습니다. 어떻게해야합니까?

이 기능의 명백한 이름이 참조 매뉴얼에 있다고 생각하는 것을 찾아 보았으며 적절한 것을 찾지 못했습니다.



답변

나는 R을 전혀 모른다. 그러나 약간의 창의적인 인터넷 검색이 나를 이끌었다. http://tolstoy.newcastle.edu.au/R/help/05/04/1919.html

거기에서 핵심 인용문 :

목록에서 요소를 제거하는 방법에 대한 R에 대한 명시 적 문서를 찾지 못했지만 시행 착오가 나에게 알려줍니다.

myList [[5]] <-NULL

다섯 번째 요소를 제거한 다음 해당 요소를 삭제하여 발생한 구멍을 “닫습니다”. 인덱스 값을 플러싱하므로 요소를 떨어 뜨릴 때주의해야합니다. 나는 목록의 뒤에서 앞으로 일해야한다.

나중에 스레드에서 해당 게시물에 대한 응답 상태 :

목록의 요소를 삭제하려면 R FAQ 7.1을 참조하십시오.

그리고 R FAQ관련 섹션은 다음과 같습니다.

… x [i] 또는 x [[i]]를 NULL로 설정하지 마십시오. 목록에서 해당 구성 요소가 제거되기 때문입니다.

어떤 요소를 제거하는 방법을 (뒤로 약간) 설명하는 것 같습니다.

그것이 올바른 방향으로 당신을 도우거나 최소한 이끌어 줄 희망입니다.


답변

목록을 제자리에서 수정하지 않으려면 (예 : 요소가 제거 된 목록을 함수에 전달하기 위해) 인덱싱을 사용할 수 있습니다. 음수 인덱스는 “이 요소를 포함하지 않음”을 의미합니다.

x <- list("a", "b", "c", "d", "e"); # example list

x[-2];       # without 2nd element

x[-c(2, 3)]; # without 2nd and 3rd

또한 논리 인덱스 벡터가 유용합니다.

x[x != "b"]; # without elements that are "b"

이것은 데이터 프레임에서도 작동합니다.

df <- data.frame(number = 1:5, name = letters[1:5])

df[df$name != "b", ];     # rows without "b"

df[df$number %% 2 == 1, ] # rows with odd numbers only


답변

다음은 R 에서 목록 의 마지막 요소를 제거하는 방법입니다 .

x <- list("a", "b", "c", "d", "e")
x[length(x)] <- NULL

x가 벡터 일 경우 새 객체를 만들어야합니다.

x <- c("a", "b", "c", "d", "e")
x <- x[-length(x)]
  • 목록벡터 작업

답변

한 줄로 된 목록에서 Null 요소 제거

x=x[-(which(sapply(x,is.null),arr.ind=TRUE))]

건배


답변

명명 된 목록 인 경우 간단히 사용할 수 있다고 덧붙이고 싶습니다 within.

l <- list(a = 1, b = 2)    
> within(l, rm(a))
$b
[1] 2

따라서 원래 목록을 덮어 쓸 수 있습니다

l <- within(l, rm(a)) 

alist에서 이름이 지정된 요소를 제거 합니다 l.


답변

명명 된 목록이 있고 특정 요소를 제거하려면 다음을 시도하십시오.

lst <- list(a = 1:4, b = 4:8, c = 8:10)

if("b" %in% names(lst)) lst <- lst[ - which(names(lst) == "b")]

이 목록을 만들 것입니다 lst요소 a, b, c. 두 번째 줄은 요소 b가 존재하는지 확인한 후 요소 를 제거 합니다 (언급 된 @hjv 문제를 피하기 위해).

또는 더 나은 :

lst$b <- NULL

이 방법은 (예를 들어, 존재하지 않는 요소를 삭제하려고 문제가되지 않습니다 lst$g <- NULL)


답변

다양한 종류의 목록 작업을 처리하기 위한 rlist 패키지 ( http://cran.r-project.org/web/packages/rlist/index.html )가 있습니다.

예 ( http://cran.r-project.org/web/packages/rlist/vignettes/Filtering.html ) :

library(rlist)
devs <- 
  list(
    p1=list(name="Ken",age=24,
      interest=c("reading","music","movies"),
      lang=list(r=2,csharp=4,python=3)),
    p2=list(name="James",age=25,
      interest=c("sports","music"),
      lang=list(r=3,java=2,cpp=5)),
    p3=list(name="Penny",age=24,
      interest=c("movies","reading"),
      lang=list(r=1,cpp=4,python=2)))

list.remove(devs, c("p1","p2"))

결과 :

# $p3
# $p3$name
# [1] "Penny"
# 
# $p3$age
# [1] 24
# 
# $p3$interest
# [1] "movies"  "reading"
# 
# $p3$lang
# $p3$lang$r
# [1] 1
# 
# $p3$lang$cpp
# [1] 4
# 
# $p3$lang$python
# [1] 2