Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

total=0: error due to ratio = NaN #119

Open
HenrikBengtsson opened this issue Apr 25, 2021 · 0 comments
Open

total=0: error due to ratio = NaN #119

HenrikBengtsson opened this issue Apr 25, 2021 · 0 comments
Labels
bug an unexpected problem or unintended behavior

Comments

@HenrikBengtsson
Copy link

Issue

library(progress)
pb <- progress_bar$new(total = 0L, show_after = 0.0)
dummy <- pb$tick(0)
# Error in rep("", complete_len) : invalid 'times' argument

Troubleshooting

> traceback()
5: paste(rep("", complete_len), collapse = private$chars$complete)
4: pb_render(self, private, tokens)
3: private$render(tokens)
2: pb_tick(self, private, len, tokens)
1: pb$tick(0)

This happens because pb_ratio() returns NaN (as also pointed out in #111 and #79)

> progress:::pb_ratio
function (self, private) 
{
    ratio <- (private$current/private$total)
    ratio <- max(ratio, 0)
    ratio <- min(ratio, 1)
    ratio
}

Patch

A patch would be:

index d72da62..d11fc20 100644
--- a/R/progress.R
+++ b/R/progress.R
@@ -318,8 +318,8 @@ pb_tick <- function(self, private, len, tokens) {
 
 pb_ratio <- function(self, private) {
   ratio <- (private$current / private$total)
-  ratio <- max(ratio, 0)
-  ratio <- min(ratio, 1)
+  ratio <- max(c(ratio, 0), na.rm = TRUE)
+  ratio <- min(c(ratio, 1), na.rm = TRUE)
   ratio
 }

Session info

> sessionInfo()
R version 4.0.4 (2021-02-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.5 LTS

Matrix products: default
BLAS:   /home/hb/shared/software/CBI/R-4.0.4/lib/R/lib/libRblas.so
LAPACK: /home/hb/shared/software/CBI/R-4.0.4/lib/R/lib/libRlapack.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] progress_1.2.2.9000

loaded via a namespace (and not attached):
 [1] compiler_4.0.4    ellipsis_0.3.1    R6_2.5.0          hms_1.0.0        
 [5] prettyunits_1.1.1 crayon_1.4.1      vctrs_0.3.7       lifecycle_1.0.0  
 [9] pkgconfig_2.0.3   rlang_0.4.10 

Background

It's useful to be able to create zero-length progress bars. This way one could do:

my_apply <- function(X) {
  pb <- progress_bar$new(total = length(X))
  on.exit(pb$terminate())
  lapply(X, FUN = function(x) {
     pb$tick()
     sqrt(x)
  })
}

without having to condition the code on length(X) == 0.

See also

This is related to #79 ('Segfault when total=0') and probably also to #111 ('Error when total = NA and format contains :bar'). However, since #79 is on native code and segfault, and my example is a pure R problem, I decided to post it as a standalone issue

HenrikBengtsson added a commit to HenrikBengtsson/progressr that referenced this issue Apr 25, 2021
@gaborcsardi gaborcsardi added the bug an unexpected problem or unintended behavior label Nov 1, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug an unexpected problem or unintended behavior
Projects
None yet
Development

No branches or pull requests

2 participants