우리는 이전 포스팅에서
https://bluediary8.tistory.com/85?category=787191
여러 csv파일을 합치는 과정 중에 for문과 rbind를 사용한 적이 있습니다.
코드의 형태는 다음과 같죠
final<-NULL
for(i in 1:10){
a<-c(1,2,3)
final<-rbind(final,a)
}
final
이러한 방식은 데이터를 합치거나 크롤링을 할때에 굉장히 자주사용하는 방식입니다.
그런데 데이터가 엄청 커질때에는 이러한 방식이 비효율적입니다.
그 이유는, final<-rbind(final, a) 이 부분에서 전체 큰 데이터 밑에 새로운 데이터를 붙이기 때문에
데이터가 커지면 커질수록 참조해야하는 변수의 크기(fianL0가 커지기 때문에
속도 저하가 일어납니다.
이러한 경우에는 list의 do.call문을 활용하여 속도를 높이는 방법이 있습니다.
위 코드와 같은 역할을 하는 코드를 아래와 같이 작성할 수 있습니다.
list1<-list()
for(i in 1:10){
a<-c(1,2,3)
list1[[i]]<-a
}
do.call("rbind",list1)
즉, list의 i번째 큰방에 벡터를 넣은 후,
for문이 끝난 다음에 do.call("rbind", list객체) 를 통해 list안에 있는 큰 방들에대해 rbind를 시킵니다.
do.call문을 이렇게 list의 데이터를 조금더 쉽게 다룰 수 있게 도와주는 도구입니다.
"rbind"외에 "cbind", "c"등도 적용이 가능합니다.
do.call("cbind",list1)
반응형
'R프로그래밍' 카테고리의 다른 글
R프로그래밍 - Vector , matrix, dataframe, list dimension 구하기 (0) | 2020.06.29 |
---|---|
R프로그래밍 - list 저장하기 (save / load 함수) (0) | 2020.06.29 |
R프로그래밍 - Sapply함수와 lapply함수 알아보기 (2) | 2020.06.26 |
R프로그래밍 - 문자열 분리하는 함수 str_split / list구조 (0) | 2020.06.26 |
R프로그래밍 - list함수 알아보기 (0) | 2020.06.25 |
댓글