首页 > 解决方案 > for循环中的状态栏

问题描述

我试图在我的 for 循环中创建一个状态栏,但状态保持在 0%。我不确定问题可能是什么。

  n <- length(unique(mu_ut$AnimalID))
  pb <- txtProgressBar(min = 0, max = n, style = 3)
  for(i in unique(mu_ut$AnimalID)){ 
     AnID <- paste("AnID", i, sep = ".")
     assign(AnID, mu_ut[mu_ut$AnimalID == i,])
     dbWriteTable(conn = db, name = AnID, value = mu_ut[mu_ut$AnimalID == i,], 
                  field.types = c(DateAndTime = "DATETIME", 
                                  AnimalID = "CHAR",
                                  Species = "CHAR",
                                  Sex = "CHAR",
                                  CurrentCohort = "CHAR",
                                  BirthYear = "DATE",
                                  CaptureUnit = "CHAR",
                                  CaptureSubunit = "CHAR",
                                  CaptureArea = "CHAR"), overwrite = TRUE)
  Sys.sleep(1)
  setTxtProgressBar(pb, i)
  }

setTxtProgressBar 函数中的“i”参数是否有问题?

先感谢您。

标签: sqlrprogress-barrsqlite

解决方案


问题是setTxtProgressBar它的值需要在序列min=0max=n,如您在txtProgressBar. 由于i确实是 内的唯一值之一mu_ut$AnimalID,因此即使是整数,也不清楚它是否也在范围内0:n

试试这个。

  ids <- unique(mu_ut$AnimalID)
  pb <- txtProgressBar(min = 0, max = length(ids), style = 3)
  for (ind in seq_along(ids)) { 
     id <- ids[ind]
     AnID <- paste("AnID", id, sep = ".")
     assign(AnID, mu_ut[mu_ut$AnimalID == id,])
     dbWriteTable(conn = db, name = AnID, value = mu_ut[mu_ut$AnimalID == id,], 
                  field.types = c(DateAndTime = "DATETIME", 
                                  AnimalID = "CHAR",
                                  Species = "CHAR",
                                  Sex = "CHAR",
                                  CurrentCohort = "CHAR",
                                  BirthYear = "DATE",
                                  CaptureUnit = "CHAR",
                                  CaptureSubunit = "CHAR",
                                  CaptureArea = "CHAR"), overwrite = TRUE)
  Sys.sleep(1)
  setTxtProgressBar(pb, ind)
  }

(这与@CareyCaginalp 的评论非常相似。)


推荐阅读