Я не понимаю, почему все используют dplyr
для обхода.База R намного быстрее :
ОБНОВЛЕНО: я написал myfun4
и myfun3
в базе R. Первый масштабируемый.Последний нет.Остальные четыре функции - это решения с dplyr
.Тест показывает, что dplyr
медленнее, чем в десять раз:
microbenchmark::microbenchmark(myfun1(),myfun2(),myfun3(),myfun4(),myfun5(),myfun6())
Unit: microseconds
expr min lq mean median uq max neval
myfun1() 5356.6 5739.90 6320.338 5967.45 6327.75 11177.7 100
myfun2() 6208.1 6676.55 7220.770 6941.10 7172.55 10936.3 100
myfun3() 8645.3 9299.30 10287.908 9676.30 10312.85 15837.1 100
myfun4() 4426.1 4712.40 5405.235 4866.65 5245.20 12573.2 100
myfun5() 168.6 250.05 292.472 270.70 303.15 2119.3 100
myfun6() 141.7 203.15 341.079 237.00 256.45 6278.0 100
Код:
myfun6<-function(){
n=2
res_l<-lapply(1:n,function(j) mtcars$mpg)
res<-data.frame(do.call(cbind,res_l))
rownames(res)=rownames(mtcars)
colnames(res)=c('foo','bar')
}
myfun5<-function(){
res<-data.frame(foo=mtcars$mpg,bar=mtcars$mpg)
}
myfun4<-function(){
mtcars %>%
select(foo=mpg) %>%
bind_cols(bar=.$foo)
}
myfun3<-function(){
res<-map2(c('mpg', 'mpg'), c('foo', 'bar'), ~ mtcars %>%
select(!! .y := !! rlang::sym(.x))) %>%
bind_cols
}
myfun2<-function(){
res<-transmute(mtcars, foo = mpg, bar = mpg)
}
myfun1<-function(){
res<-mtcars %>%
select(foo = mpg) %>%
mutate(bar = foo)
}