我知道我可以为自己创建的循环或类似的东西创建一个进度条。但是,是否有可能以某种方式跟踪包中的功能的melt()
进度reshape
。或者跟踪进度的唯一方法是推断此函数在较小的数据集上工作所需的时间?
问问题
178 次
1 回答
0
不幸的是,没有简单的方法可以为还没有进度条的功能获取进度条。如果你真的有动力,你可以深入研究 reshape2的源代码tidyr
并添加功能(或者更现代的等价物的源代码, )。如果您有分解数据集的合乎逻辑的方法,您可以使用purr::map
并编写一个自定义函数来报告其自身的进度。如果您发布数据示例,我很乐意向您展示它是如何工作的。
顺便说一句,“推断此函数在较小的数据集上工作所需的时间”可能很困难。下面的代码重塑了 n 为 1000、10000、100000 和 1000000 的数据集,然后计算它们运行所需的时间。每行数据的时间量变化很大。在我的计算机上,1000 行数据集的每行时间是 1000000 行数据集的 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)
于 2017-02-20T18:39:39.393 回答