2014-04-23 55 views
3

我知道我可以創建一個自行創建的循環或類似的東西的進度條。然而,是否有可能以某種方式跟蹤reshape包中的功能melt()的進度。或者追蹤進展的唯一方法是推斷此功能在較小數據集上工作所需的時間?是否有可能跟蹤包裝重塑中的融化功能的進度?

+0

你的問題不清楚我害怕。有沒有可能舉一個實際的例子? –

+0

不幸的是,我幾乎可以肯定沒有簡單的方法可以這麼做。 – tonytonov

回答

0

不幸的是,沒有簡單的方法可以獲得一個尚未有功能的進度條。如果你真的有動力,你可以挖掘source code進行reshape2並添加功能(或更現代的等效源tidyr)。如果您有合理的方法來分解數據集,則可以使用purr::map並編寫一個自定義函數來報告自己的進度。如果您發佈了一個數據示例,我很樂意向您展示如何工作。另一方面,可能難以「推斷該功能在小型數據集上工作所需的時間」。下面的代碼重新整形n爲1000,10000,100000和1000000的數據集,然後計算它們運行多長時間的時間。每行數據的時間差異很大。在我的計算機上,與具有1000000行的數據集相比,具有1000行的數據集的每行時間是24倍。這預示了melt函數將花費多長時間的難度。

library(tidyverse) 
library(microbenchmark) 

# Create dummy data with different numbers of rows 
dummy_1k <- 
    tibble(group = 1:1000, 
     test1 = rnorm(1000), 
     test2 = runif(1000)) 
dummy_10k <- 
    tibble(
    group = 1:10000, 
    test1 = rnorm(10000), 
    test2 = runif(10000) 
) 
dummy_100k <- 
    tibble(
    group = 1:100000, 
    test1 = rnorm(100000), 
    test2 = runif(100000) 
) 
dummy_1000k <- 
    tibble(
    group = 1:1000000, 
    test1 = rnorm(1000000), 
    test2 = runif(1000000) 
) 

# Define a convenience function to melt our dummy data 
molten_dummy <- function(dum_df) { 
    reshape2::melt(dum_df, id = "group") 
} 

# Measure how long it takes to melt a row of data based 
# on the number of rows in the tibble 
microbenchmark(
    molten_dummy(dummy_1k), 
    molten_dummy(dummy_10k), 
    molten_dummy(dummy_100k), 
    molten_dummy(dummy_1000k), 
    times = 1000L, unit = "ms" 
) %>% 
    tbl_df() %>% 
    left_join(tribble(
    ~expr, ~count, 
    "molten_dummy(dummy_1k)", 1000, 
    "molten_dummy(dummy_10k)", 10000, 
    "molten_dummy(dummy_100k)", 100000, 
    "molten_dummy(dummy_1000k)", 1000000 
)) %>% 
    mutate(count = as.integer(count), time_per_row = time/count) %>% 
    group_by(count) %>% 
    summarise(time_per_row = mean(time_per_row)) %>% 
    arrange(count)