gpt4 book ai didi

r - 如何监控应用功能的进度?

转载 作者:行者123 更新时间:2023-12-03 23:18:55 25 4
gpt4 key购买 nike

我需要计算出一个 2886*2886 相关矩阵,问题是构建中间数据表( RESULT )需要很长时间才能将其绑定(bind)在一起,所以我希望能够在调用最后一个时执行以下操作线RESULT=rbindlist(apply(COMB, 1, append))在下面的代码中:

  • 估计完成应用函数所需的时间
  • 监控进度
  • 稍后可以暂停并继续

  • 这是代码:
    SOURCE=data.table(NAME=rep(paste0("NAME", as.character(1:2889)), each=600), VALUE=sample(c(TRUE,FALSE), 600, TRUE) )
    > SOURCE
    NAME VALUE
    1: NAME1 TRUE
    2: NAME1 TRUE
    3: NAME1 TRUE
    4: NAME1 TRUE
    5: NAME1 TRUE
    ---
    1733396: NAME999 TRUE
    1733397: NAME999 TRUE
    1733398: NAME999 TRUE
    1733399: NAME999 TRUE
    1733400: NAME999 FALSE

    setkey(SOURCE,NAME)
    a=SOURCE[,unique(NAME)]
    COMB=data.table(expand.grid(a,a, stringsAsFactors=FALSE))
    > COMB
    Var1 Var2
    1: NAME1 NAME1
    2: NAME10 NAME1
    3: NAME100 NAME1
    4: NAME1000 NAME1
    5: NAME1001 NAME1
    ---
    8346317: NAME995 NAME999
    8346318: NAME996 NAME999
    8346319: NAME997 NAME999
    8346320: NAME998 NAME999
    8346321: NAME999 NAME999

    append <- function(X) {
    data.table(NAME1=X[1], VALUE1=SOURCE[X[1], VALUE],
    NAME2=X[2], VALUE2=SOURCE[X[2], VALUE] )
    }

    RESULT=rbindlist(apply(COMB, 1, append))

    任何的想法 ?

    另外你知道是否有更快的方法来生成数据表 RESULT来自 SOURCE ? RESULT是一个中间数据表,用于计算 VALUE1 之间的相关值和 VALUE2对于每对 NAME .

    带有 SOURCE 的子集 RESULT看起来像这样:
    SOURCE=SOURCE[sample(1:nrow(SOURCE), 3)]
    setkey(SOURCE,NAME)
    a=SOURCE[,unique(NAME)]
    COMB=data.table(expand.grid(a,a, stringsAsFactors=FALSE))
    RESULT=rbindlist(apply(COMB, 1, append))
    > RESULT
    NAME1 VALUE1 NAME2 VALUE2
    1: NAME1859 TRUE NAME1859 TRUE
    2: NAME768 FALSE NAME1859 TRUE
    3: NAME795 TRUE NAME1859 TRUE
    4: NAME1859 TRUE NAME768 FALSE
    5: NAME768 FALSE NAME768 FALSE
    6: NAME795 TRUE NAME768 FALSE
    7: NAME1859 TRUE NAME795 TRUE
    8: NAME768 FALSE NAME795 TRUE
    9: NAME795 TRUE NAME795 TRUE

    稍后我会做 RESULT[,VALUE3:=(VALUE1==VALUE2)]最终得到相关值: RESULT[, mean(VALUE3), by=c("NAME1", "NAME2")]所以也许整个过程可以更有效地完成,谁知道呢。

    最佳答案

    您可以使用图书馆 pbapply ( git ),它显示了 '*apply' 系列中任何函数的时间估计和进度条。
    对于您的问题:

    library(pbapply)      
    library(data.table)

    result <- data.table::rbindlist( pbapply(COMB, 1, append) )
    附言。这个答案解决了你的两个初始点。关于第三点,我不确定是否可以暂停该功能。无论如何,您的操作确实花费了太长时间,所以我建议您发布一个单独的问题,询问如何优化您的任务。

    关于r - 如何监控应用功能的进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37408668/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com