R - время выполнения по строке кода в dplyr - PullRequest
2 голосов
/ 05 апреля 2019

Когда я хочу оценить время выполнения кода R, я использую функцию system.time().

library(dplyr)

system.time({
    Titanic %>%
        as.data.frame() %>%
        mutate(Dataset = 1) %>%
        bind_rows(as.data.frame(Titanic)) %>%
        mutate_all(funs(replace_na(., NA))) %>% 
        filter(Dataset != 1)
})

# utilisateur     système      écoulé 
#        0.02        0.00        0.02

Вопрос: Есть ли способ узнать время работыкаждой операции, операции между каждым каналом (mutate, затем bind_rows, затем filter и т. д.) без выполнения каждой по одной или без записи нескольких system.time()?

Inэтот пример бесполезен, но иногда я получал длинный скрипт с длительным временем выполнения, и я хотел бы определить, какие операции являются самыми низкими.

Я провел некоторое исследование, но не нашел что-тополезно.

Ответы [ 2 ]

4 голосов
/ 05 апреля 2019

Вы можете использовать пакет profvis:

library(tidyverse)    
library(profvis)

profvis({
  Titanic %>%
    as.data.frame() %>%
    mutate(Dataset = 1) %>%
    bind_rows(as.data.frame(Titanic)) %>%
    mutate_all(funs(replace_na(., NA))) %>% 
    filter(Dataset != 1)
})

enter image description here

1 голос
/ 08 апреля 2019

Вас может заинтересовать %L>% труба из моей упаковки трубы :

# devtools::install_github("moodymudskipper/pipes")
library(pipes)
Titanic %L>%
  as.data.frame() %L>%
  mutate(Dataset = 1) %L>%
  bind_rows(as.data.frame(Titanic)) %L>%
  mutate_all(list(~replace_na(., NA))) %L>% 
  filter(Dataset != 1)

# as.data.frame(.)   ~  0.03 sec
# mutate(., Dataset = 1)   ~  0 sec
# bind_rows(., as.data.frame(Titanic))   ~  0 sec
# mutate_all(., list(~replace_na(., NA)))   ~  0 sec
# filter(., Dataset != 1)   ~  0.03 sec
# [1] Class    Sex      Age      Survived Freq     Dataset 
# <0 rows> (or 0-length row.names)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...