다음과 같은 목록이 있다고 가정 해 보겠습니다.
x = list(list(1,2), list(3,4), list(5,6))
중첩 된 목록의 첫 번째 요소 만 포함 된 목록을 원합니다. 이렇게 다른 목록을 반환하여이를 수행 할 수 있습니다.
x1 = lapply(x, function(l) l[[1]])
이것에 대한 단축키 표기법이 있습니까?
답변:
단축키는 많지 않지만 다음과 같이 할 수 있습니다.
lapply(x, `[[`, 1)
# [[1]]
# [1] 1
#
# [[2]]
# [1] 3
#
# [[3]]
# [1] 5
또 다른 가능성은 nice purrr
라이브러리를 사용합니다 .
library(purrr)
map(x, 1)
map
숫자 값을 추출로 해석하기 때문에 작동합니다.[[
예제 목록의 경우 다음을 수행 할 수 있습니다.
unlist(x)[ c(TRUE,FALSE) ]
하지만 정확히 2 개의 요소를 갖는 각 하위 목록에 따라 다릅니다.
요소 수가 다른 경우 먼저을 수행 sapply
하여 길이를 계산 한 다음 해당하는 첫 번째 요소 위치를 계산 한 다음 (참조 cumsum
) unlist
ed 목록 에서 해당 값을 선택할 수 있습니다. 그러나 그때까지 받아 들여진 대답은 아마도 훨씬 더 간단 할 것입니다.
모든 하위 목록의 길이가 같으면 (2와 다를 수 있음) 다음과 같이 할 수 있습니다.
do.call( rbind, x)[,1]
또는 일반적인 개체에 대한 다른 캐스팅. 그러나 이것이 lapply
접근 방식 만큼 효율적일 것 같지 않습니다.