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

label_number error when including scale_cut argument #413

Open
cb12991 opened this issue Nov 29, 2023 · 11 comments · May be fixed by #420
Open

label_number error when including scale_cut argument #413

cb12991 opened this issue Nov 29, 2023 · 11 comments · May be fixed by #420

Comments

@cb12991
Copy link

cb12991 commented Nov 29, 2023

Error occurs when supplying scale_cut argument && number input actually cut (i.e., 1,000 -> 1K).

For example, no error thrown when number input does not need cutting:

scales::label_number(scale_cut = scales::cut_short_scale())(mtcars$mpg) 
#>  [1] "21.0" "21.0" "22.8" "21.4" "18.7" "18.1" "14.3" "24.4" "22.8" "19.2"
#> [11] "17.8" "16.4" "17.3" "15.2" "10.4" "10.4" "14.7" "32.4" "30.4" "33.9"
#> [21] "21.5" "15.5" "15.2" "13.3" "19.2" "27.3" "26.0" "30.4" "15.8" "19.7"
#> [31] "15.0" "21.4"

Error thrown when number input requires cutting:

scales::label_number(scale_cut = scales::cut_short_scale())(mtcars$mpg^2)
#> Error in break_suffix[bad_break][improved_break & !power10_break] <- names(lower_break[improved_break & : NAs are not allowed in subscripted assignments

Created on 2023-11-29 with reprex v2.0.2

@cgoo4
Copy link

cgoo4 commented Dec 3, 2023

I was just about to post the same issue. Adding reprex here in case it helps:

library(tidyverse)
library(scales)

# Error
tibble(x = seq(1, 10, 1),
       y = seq(10, 9010, 1000)) |> 
  ggplot(aes(x, y)) +
  geom_line() +
  scale_y_continuous(labels = label_currency(scale_cut = cut_short_scale()))
#> Error in break_suffix[bad_break][improved_break & !power10_break] <- names(lower_break[improved_break & : NAs are not allowed in subscripted assignments

# Work Okay
tibble(x = seq(0, 10, 1),
       y = 10 ^ (0:10)) |> 
  ggplot(aes(x, y)) +
  geom_line() +
  scale_y_log10(labels = label_currency(scale_cut = cut_short_scale()))

tibble(x = seq(0, 10, 1),
       y = 10 ^ (0:10)) |> 
  ggplot(aes(x, y)) +
  geom_line() +
  scale_y_continuous(labels = label_currency(scale_cut = cut_short_scale()))

tibble(x = seq(1, 10, 1),
       y = seq(10, 9010, 1000)) |> 
  ggplot(aes(x, y)) +
  geom_line() +
  scale_y_log10(labels = label_currency(scale_cut = cut_short_scale()))

Created on 2023-12-03 with reprex v2.0.2

Session info
sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#>  setting  value
#>  version  R version 4.3.2 (2023-10-31)
#>  os       macOS Sonoma 14.1.2
#>  system   aarch64, darwin20
#>  ui       X11
#>  language (EN)
#>  collate  en_US.UTF-8
#>  ctype    en_US.UTF-8
#>  tz       Europe/London
#>  date     2023-12-03
#>  pandoc   3.1.1 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/tools/ (via rmarkdown)
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────
#>  package     * version date (UTC) lib source
#>  cli           3.6.1   2023-03-23 [1] CRAN (R 4.3.0)
#>  colorspace    2.1-0   2023-01-23 [1] CRAN (R 4.3.0)
#>  curl          5.1.0   2023-10-02 [2] CRAN (R 4.3.1)
#>  digest        0.6.33  2023-07-07 [1] CRAN (R 4.3.0)
#>  dplyr       * 1.1.4   2023-11-17 [1] CRAN (R 4.3.1)
#>  evaluate      0.23    2023-11-01 [2] CRAN (R 4.3.1)
#>  fansi         1.0.5   2023-10-08 [1] CRAN (R 4.3.1)
#>  farver        2.1.1   2022-07-06 [1] CRAN (R 4.3.0)
#>  fastmap       1.1.1   2023-02-24 [2] CRAN (R 4.3.0)
#>  forcats     * 1.0.0   2023-01-29 [2] CRAN (R 4.3.0)
#>  fs            1.6.3   2023-07-20 [2] CRAN (R 4.3.0)
#>  generics      0.1.3   2022-07-05 [1] CRAN (R 4.3.0)
#>  ggplot2     * 3.4.4   2023-10-12 [1] CRAN (R 4.3.1)
#>  glue          1.6.2   2022-02-24 [1] CRAN (R 4.3.0)
#>  gtable        0.3.4   2023-08-21 [1] CRAN (R 4.3.0)
#>  highr         0.10    2022-12-22 [2] CRAN (R 4.3.0)
#>  hms           1.1.3   2023-03-21 [2] CRAN (R 4.3.0)
#>  htmltools     0.5.7   2023-11-03 [2] CRAN (R 4.3.1)
#>  knitr         1.45    2023-10-30 [2] CRAN (R 4.3.1)
#>  labeling      0.4.3   2023-08-29 [1] CRAN (R 4.3.0)
#>  lifecycle     1.0.4   2023-11-07 [1] CRAN (R 4.3.1)
#>  lubridate   * 1.9.3   2023-09-27 [1] CRAN (R 4.3.1)
#>  magrittr      2.0.3   2022-03-30 [1] CRAN (R 4.3.0)
#>  munsell       0.5.0   2018-06-12 [1] CRAN (R 4.3.0)
#>  pillar        1.9.0   2023-03-22 [1] CRAN (R 4.3.0)
#>  pkgconfig     2.0.3   2019-09-22 [1] CRAN (R 4.3.0)
#>  purrr       * 1.0.2   2023-08-10 [1] CRAN (R 4.3.0)
#>  R.cache       0.16.0  2022-07-21 [2] CRAN (R 4.3.0)
#>  R.methodsS3   1.8.2   2022-06-13 [2] CRAN (R 4.3.0)
#>  R.oo          1.25.0  2022-06-12 [2] CRAN (R 4.3.0)
#>  R.utils       2.12.3  2023-11-18 [2] CRAN (R 4.3.1)
#>  R6            2.5.1   2021-08-19 [1] CRAN (R 4.3.0)
#>  readr       * 2.1.4   2023-02-10 [2] CRAN (R 4.3.0)
#>  reprex        2.0.2   2022-08-17 [2] CRAN (R 4.3.0)
#>  rlang         1.1.2   2023-11-04 [1] CRAN (R 4.3.1)
#>  rmarkdown     2.25    2023-09-18 [2] CRAN (R 4.3.1)
#>  rstudioapi    0.15.0  2023-07-07 [2] CRAN (R 4.3.0)
#>  scales      * 1.3.0   2023-11-28 [1] CRAN (R 4.3.1)
#>  sessioninfo   1.2.2   2021-12-06 [2] CRAN (R 4.3.0)
#>  stringi       1.8.2   2023-11-23 [1] CRAN (R 4.3.1)
#>  stringr     * 1.5.1   2023-11-14 [1] CRAN (R 4.3.1)
#>  styler        1.10.2  2023-08-29 [2] CRAN (R 4.3.0)
#>  tibble      * 3.2.1   2023-03-20 [1] CRAN (R 4.3.0)
#>  tidyr       * 1.3.0   2023-01-24 [1] CRAN (R 4.3.0)
#>  tidyselect    1.2.0   2022-10-10 [1] CRAN (R 4.3.0)
#>  tidyverse   * 2.0.0   2023-02-22 [2] CRAN (R 4.3.0)
#>  timechange    0.2.0   2023-01-11 [1] CRAN (R 4.3.0)
#>  tzdb          0.4.0   2023-05-12 [1] CRAN (R 4.3.0)
#>  utf8          1.2.4   2023-10-22 [1] CRAN (R 4.3.1)
#>  vctrs         0.6.5   2023-12-01 [1] CRAN (R 4.3.1)
#>  withr         2.5.2   2023-10-30 [1] CRAN (R 4.3.1)
#>  xfun          0.41    2023-11-01 [2] CRAN (R 4.3.1)
#>  xml2          1.3.5   2023-07-06 [2] CRAN (R 4.3.0)
#>  yaml          2.3.7   2023-01-23 [2] CRAN (R 4.3.0)
#> 
#>  [1] /Users/carlgoodwin/Library/R/arm64/4.3/library
#>  [2] /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/library
#> 
#> ──────────────────────────────────────────────────────────────────────────────

@rosssheehy
Copy link

rosssheehy commented Dec 3, 2023

Same issue here, CONFIRMED IT IS SOLVED BY ROLLING BACK TO Scales v1.2.1

Error message

Error in break_suffix[bad_break][improved_break & !power10_break] <- names(lower_break[improved_break & : NAs are not allowed in subscripted assignments

@uramith
Copy link

uramith commented Dec 6, 2023

Yeah, Same issue with cut_short_scale. But cut_si works fine.
here is an example :
Same error as mentioned above

set.seed(123)
expand_grid(date = seq(from = as.Date("2023-12-01")
                  , to = as.Date("2023-12-06")
                  , by = "day")
       , entity = c("A","B","C","D")) %>% 
  mutate(cnts = runif(nrow(.),min = 10, max = 1e4)) %>% 
  ggplot(aes(date, y= cnts, fill = entity, color = entity)) +
  geom_point() +
  geom_line() +
  facet_wrap(entity ~ ., scales = "free") +
  scale_y_continuous(labels = scales::label_number(scale_cut = scales::cut_short_scale()))

With cut_si there is no error!

set.seed(123)
expand_grid(date = seq(from = as.Date("2023-12-01")
                       , to = as.Date("2023-12-06")
                       , by = "day")
            , entity = c("A","B","C","D")) %>% 
  mutate(cnts = runif(nrow(.),min = 10, max = 1e4)) %>% 
  ggplot(aes(date, y= cnts, fill = entity, color = entity)) +
  geom_point() +
  geom_line() +
  facet_wrap(entity ~ ., scales = "free") +
  scale_y_continuous(labels = scales::label_number(scale_cut = scales::cut_si(""))) 

@Filebb
Copy link

Filebb commented Dec 10, 2023

Same issue with other data, and I confirm that rolling back to 1.2.1 solves the problem

@msgoussi
Copy link

How to roll back to Scales v1.2.1?
why they do not keep an archive of old versions ?

@Filebb
Copy link

Filebb commented Dec 13, 2023

@jbengler
Copy link

jbengler commented Dec 13, 2023

Clearly looks like unintended behavior to me.

scales 1.3.0

scales::label_number(scale_cut = scales::cut_short_scale())(c(0,1000,2000))
#> [1] "0"  "1K" "2K"
scales::label_number(scale_cut = scales::cut_short_scale())(c(0,500,1500,2000,2500))
#> Error in break_suffix[bad_break][improved_break & !power10_break] <- names(lower_break[improved_break & : NAs are not allowed in subscripted assignments

scales 1.2.1

scales::label_number(scale_cut = scales::cut_short_scale())(c(0,1000,2000))
#> [1] "0"  "1K" "2K"
scales::label_number(scale_cut = scales::cut_short_scale())(c(0,500,1500,2000,2500))
#> [1] "0"    "500"  "1.5K" "2.0K" "2.5K"

Created on 2023-12-17 with reprex v2.0.2

@jbengler
Copy link

jbengler commented Dec 17, 2023

Some more thoughts

It seems like the problem comes from this line of code in the function scale_cut

lower_break <- breaks[match(break_suffix[bad_break], names(breaks)) - 1]

In my example above lower_breaks become 0 which causes trouble with division by zero in the following lines.

It might be sufficient to add one more line and make it:

lower_break <- breaks[match(break_suffix[bad_break], names(breaks)) - 1]
lower_break[lower_break == 0] <- 1

@ibuiltthis
Copy link

Have encountered the same problem while using ggplot with scale_y_continuous. Have found a workaround that fixed it for me.

library(tidyverse)

# Error in break_suffix[bad_break][improved_break & !power10_break] <- names(lower_break[improved_break &  : 
#   NAs are not allowed in subscripted assignments
tibble(
    x = 1:3,
    y = as.integer(c(12312, 11931, 11185))
) |>
    ggplot() +
    geom_col(
        aes(x = x, y = y),
    ) +
    scale_y_continuous(
        label = scales::label_number(scale_cut = scales::cut_short_scale()),
    )

# Workaround: Adding a 1 between 0 and 1000 in the result of scales_cut_short() fixes the error. 
library(tidyverse)
tibble(
    x = 1:3,
    y = as.integer(c(12312, 11931, 11185))
) |>
    ggplot() +
    geom_col(
        aes(x = x, y = y),
    ) +
    scale_y_continuous(
        label = scales::label_number(scale_cut = append(scales::cut_short_scale(), 1, 1)),
    )

colindouglas pushed a commit to colindouglas/scales that referenced this issue Feb 7, 2024
colindouglas pushed a commit to colindouglas/scales that referenced this issue Feb 7, 2024
colindouglas pushed a commit to colindouglas/scales that referenced this issue Feb 7, 2024
colindouglas pushed a commit to colindouglas/scales that referenced this issue Feb 7, 2024
@msgoussi
Copy link

Hi..
I am using many packages and i get the error because i am using scales 1.2.1

namespace ‘scales’ 1.2.1 is already loaded, but >= 1.3.0 is required
Failed with error: ‘package ‘ggplot2’ could not be loaded’

please advise.

@msgoussi
Copy link

I have used devtools::install_github("r-lib/scales", ref = "c0f79d3") and it is working fine

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants