使用R中的进度条

时间:2014-05-13 17:20:39

标签: r loops if-statement progress-bar

我有一个关于使用进度条的问题,我搜索了有关该主题的信息,并找到了使用条形图作为tkProgressBar tcltk库的一些示例,是否有人知道如何在带有循环和比较器的复杂代码中使用它们? 有谁知道如何使用这种类型的酒吧?我给出了一个代码示例来了解我所引用的代码类型

 REGION_value<-as.character(GET_TEST_REGION(DF_TEST_file))
      SESSION_value<-as.character(GET_TEST_SESSION(DF_TEST_file))

      if(INIT_On_Time_value!="NULL" && END_On_Time_value!="NULL"){
          INIT_On_Time_value<-as.numeric(INIT_On_Time_value)
     }
      if(init_power_value!="NULL" && end_power_value!="NULL"){
          init_power_value<-as.numeric(init_power_value)
        }
  #parse id_device
      DF_device_value<-PARSE_status(URL_DEVICE_value)
      auxREST_REQ<-REST_GET_STOP_DEVICE(DF_device_value,URL_DEVICE_value)
      DF_inventory_items<-PARSE_INVENTORY_items(DF_device_value, URL_DEVICE_value)
    #-------------------------------------------#
      if(nrow(DF_inventory_items)>0){
        DF_epc_list<-GET_EPC_list(DF_inventory_items)
        DF_found_epc_tags<-FOUND_COMPARE_TAGS(DF_READ_EXTERNAL_LIST_EPC_TAGS, DF_epc_list)
       }
  if(init_power_value!="NULL" && end_power_value!="NULL"){

        if(init_power_value > end_power_value){
          init_power_value<-aux1
        }
           inventory_DF_List<-list()

            aux<-seq(init_power_value, end_power_value, 0.5)
            size_for<-length(aux)

          power_value_init=init_power_value
          for(i in size_for:1){
            DF_inventory_items_List<-PARSE_INVENTORY_items(DF_device_value, URL_DEVICE_value)
            if(nrow(DF_inventory_items_List)>0){
              DF_inventory_items_List<-subset(DF_inventory_items_List, select=(-tags))
              DF_inventory_items_List<-subset(DF_inventory_items_List, select=(-props)) 
            }
            inventory_DF_List[[i]]<-DF_inventory_items_List

            if(nrow(DF_inventory_items_List)>0){
              epc_list[[i]]<-GET_EPC_list(DF_inventory_items_List)
            else{
              found_epc_tags_list[[i]]<-data.frame()
            }
            power_value_init=power_value_init+0.5
          }
        DF_FOUND_EPC<-data.frame()
        for(i in length(found_epc_tags_list):1){
        DF_N_EPC[i,1]<-nrow(aux_epc)
        }
          colnames(DF_N_EPC)<-c("total_epc")
          colnames(DF_FOUND_EPC)<-c("found_epc")

          DF_N_EPC_AND_FOUND_EPC<-cbind(df_power_values,DF_N_EPC, DF_FOUND_EPC)
          DF_N_EPC_AND_FOUND_EPC_PER100<-cbind(df_power_values,DF_N_EPC, DF_FOUND_EPC_PER100)
          colnames(DF_N_EPC_AND_FOUND_EPC)<-c("power_value","total_epc","found_epc")

          FINAL_MIN_VALUE_FOUND_ITEMS<- min(DF_N_EPC_AND_FOUND_EPC[DF_N_EPC_AND_FOUND_EPC[,3] == max(DF_N_EPC_AND_FOUND_EPC[,3]),1])
          FINAL_MIN_VALUE_MAX_ITEMS <- min(DF_N_EPC_AND_FOUND_EPC[DF_N_EPC_AND_FOUND_EPC[,2] == max(DF_N_EPC_AND_FOUND_EPC[,2]),1]) 
  }else{
    FINAL_MIN_VALUE_FOUND_ITEMS<-"Not executed"
    FINAL_MIN_VALUE_MAX_ITEMS<-"Not executed"}

  #HIST_EPC<-HIST_EPC_list(DF_TAG_PHASE_EPC_counter)
   HTML_OUTPUT_ITERATIONS(df_power_values, df_on_time_values, inventory_DF_List_on_time, inventory_DF_List)
  #PDF_FILE<-Pdf_print_inform(DF_inventory_items, DF_TAG_PHASE_EPC_counter, DF_READ_EXTERNAL_LIST_EPC_TAGS, DF_epc_list )

1 个答案:

答案 0 :(得分:2)

不是tkProgressBar相关的答案,但似乎您可能正在搜索某些计算进度指示器。当我非常懒惰(而且,天哪,我多久),我使用以下方案:

niter <- 853 # number of iterations
for (i in seq_len(niter)) {
   Sys.sleep(0.1) # some fancy time-consuming operation
   cat(sprintf("\r%.2f%%", i/niter*100)) # print progress
}
cat("\n") # finalize

它只是在控制台上打印状态。 HTH

编辑:或者,正如@Thomas建议的那样,txtProgressBar可能派上用场:

niter <- 853
pb <- txtProgressBar(1, niter)
for(i in seq_len(niter)) {
   Sys.sleep(0.01)
   setTxtProgressBar(pb, i)
}
close(pb)