목록에 수백만 개의 항목이있는 x
목록이 있습니다. 그리고 하나보다 큰 길이의 모든 항목을 새 목록 z
에 넣고 싶습니다. R에서 어떻게 효율적으로이 작업을 수행 할 수 있습니까?긴 목록에서 부분 집합하는 방법?
이 코드를 시도한 결과, R은 오랫동안 계속 실행됩니다.
z=NULL
for(i in 1:length(x)) {
if(length(x[[i]])!=1) z=list(z,x[[i]])
}
목록에 수백만 개의 항목이있는 x
목록이 있습니다. 그리고 하나보다 큰 길이의 모든 항목을 새 목록 z
에 넣고 싶습니다. R에서 어떻게 효율적으로이 작업을 수행 할 수 있습니까?긴 목록에서 부분 집합하는 방법?
이 코드를 시도한 결과, R은 오랫동안 계속 실행됩니다.
z=NULL
for(i in 1:length(x)) {
if(length(x[[i]])!=1) z=list(z,x[[i]])
}
그냥 수행
z = x[sapply(x, length) > 1]
Bah, 언제 배울 수 있습니까? 먼저 대답하고 편집하십시오! ;-) –
감사 데이빗! 정말 저에게 많은 시간을 절약 해줍니다! – user1787675
이 사용하려는 한 경우입니다 vapply
:
A <- list(x = c(), y = c(1), z = c(1, 2))
B <- A[sample(1:3, 1e7, replace = TRUE)]
system.time(sapply(B, length))
# user system elapsed
# 55.95 0.54 56.50
system.time(vapply(B, length, integer(1)))
# user system elapsed
# 6.78 0.00 6.78
+1 : 특별한 대답 –
감사의 말이다! 추가 질문이 있습니다. 다른 기능의 효율성을 비교할 때 어느 때를 참조해야합니까? – user1787675
:
여기벤치 마크
sapply
및vapply
을 비교하는 덧붙여 말하자면, z = list (x, [list (x [[i])))' –고맙습니다. 내 실수를 지적! – user1787675