do.call()? {dplyr}의 rbind_list(), rbind_all()을 쓰세요
data.frame 객체가 여러개 있다면? 보통 리스트로 묶여 있는 경우에 do.call() 함수와 rbind() 함수를 써서 합쳐 줍니다.
a <- data.frame(x = 1:1000000)
b <- data.frame(x = 1:1000000)
이렇게 ,a, b 두 개가 100만개씩 있고, 이 둘을 합치려면
test.bind1 <- function(a,b) {
x <- list(a,b)
do.call(rbind,x)
}
> system.time(test.bind1(a,b))
사용자 시스템 elapsed
0.68 0.00 0.69
0.69 초 정도 걸립니다.
같은 일을
> library(dplyr)
test.bind2 <- function(a,b) {
rbind_list(a,b)
}
해서
> system.time(test.bind2(a,b))
사용자 시스템 elapsed
0.01 0.00 0.01
0.01초가 걸립니다. 뭐 70배 정도 빨리 합쳤습니다...
mclapply()를 써서 데이터가 리스트로 반환된 경우에는(반환값을 data라 할 때)
> output <- rbind_all(data)
반환된 값은 data.frame 객체입니다.
a <- data.frame(x = 1:1000000)
b <- data.frame(x = 1:1000000)
이렇게 ,a, b 두 개가 100만개씩 있고, 이 둘을 합치려면
test.bind1 <- function(a,b) {
x <- list(a,b)
do.call(rbind,x)
}
> system.time(test.bind1(a,b))
사용자 시스템 elapsed
0.68 0.00 0.69
0.69 초 정도 걸립니다.
같은 일을
> library(dplyr)
test.bind2 <- function(a,b) {
rbind_list(a,b)
}
해서
> system.time(test.bind2(a,b))
사용자 시스템 elapsed
0.01 0.00 0.01
0.01초가 걸립니다. 뭐 70배 정도 빨리 합쳤습니다...
mclapply()를 써서 데이터가 리스트로 반환된 경우에는(반환값을 data라 할 때)
> output <- rbind_all(data)
반환된 값은 data.frame 객체입니다.
댓글
댓글 쓰기