본문 바로가기
R프로그래밍

R프로그래밍 - list에 do.call문 사용하기

by 미스터탁 2020. 6. 27.

우리는 이전 포스팅에서

 

https://bluediary8.tistory.com/85?category=787191

 

R프로그래밍 - 폴더 안에 여러 csv파일들 하나로 불러 들이기 list.files 함수

이번에는 하나의 폴더안에 있는 여러 csv파일들을 R로 불려들여서 하나로 합쳐보는 코드를 작성해보겠습니다. 우선 임의의 폴더안에 여러개의 csv파일들을 복사해서 붙여넣었습니다. R이 익숙치

bluediary8.tistory.com

 

여러 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)

 

반응형

댓글