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

Strange bug when using long strings in crossing with tribbles/tibbles inside #1037

Closed
kendonB opened this issue Sep 3, 2020 · 1 comment · Fixed by #1230
Closed

Strange bug when using long strings in crossing with tribbles/tibbles inside #1037

kendonB opened this issue Sep 3, 2020 · 1 comment · Fixed by #1230
Labels
bug an unexpected problem or unintended behavior grids #️⃣ expanding, nesting, crossing, ...

Comments

@kendonB
Copy link

kendonB commented Sep 3, 2020

I find a strange bug when using long strings and logical variables. The example may not be minimal but I also demonstrate several simplifications for which the function works.

library(tidyverse)
# Bug
crossing(
  tribble(~a, ~b,
          "a", TRUE,
          "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", TRUE),
  tribble(~c, ~d,
          "a", TRUE,
          "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", TRUE)
)
#> Error: Column name `tribble(...)` must not be duplicated.

# Bug
crossing(
  tibble(a = c("a", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"),
         b = c(TRUE, TRUE)),
  tibble(c = c("a", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"),
         d = c(TRUE, TRUE))
)
#> Error: Column name `tibble(...)` must not be duplicated.

# Works removing one "a"
crossing(
  tribble(~a, ~b,
          "a", TRUE,
          "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", TRUE),
  tribble(~c, ~d,
          "a", TRUE,
          "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", TRUE)
)
#> # A tibble: 4 x 4
#>   a                              b     c                             d    
#>   <chr>                          <lgl> <chr>                         <lgl>
#> 1 a                              TRUE  a                             TRUE 
#> 2 a                              TRUE  aaaaaaaaaaaaaaaaaaaaaaaaaaaaa TRUE 
#> 3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa TRUE  a                             TRUE 
#> 4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa TRUE  aaaaaaaaaaaaaaaaaaaaaaaaaaaaa TRUE

# Works if one of the logical columns is character
crossing(
  tribble(~a, ~b,
          "a", TRUE,
          "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", TRUE),
  tribble(~c, ~d,
          "a", "a",
          "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "a")
)
#> # A tibble: 4 x 4
#>   a                              b     c                              d    
#>   <chr>                          <lgl> <chr>                          <chr>
#> 1 a                              TRUE  a                              a    
#> 2 a                              TRUE  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa a    
#> 3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa TRUE  a                              a    
#> 4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa TRUE  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa a

# works if one is tibble and the other tribble
crossing(
  tibble(a = c("a", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"),
         b = c(TRUE, TRUE)),
  tribble(~c, ~d,
          "a", TRUE,
          "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", TRUE)
)
#> # A tibble: 4 x 4
#>   a                              b     c                              d    
#>   <chr>                          <lgl> <chr>                          <lgl>
#> 1 a                              TRUE  a                              TRUE 
#> 2 a                              TRUE  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa TRUE 
#> 3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa TRUE  a                              TRUE 
#> 4 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa TRUE  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa TRUE

Created on 2020-09-04 by the reprex package (v0.3.0)

@rjpat
Copy link
Contributor

rjpat commented Sep 24, 2020

Had a look into it and think it is more an issue of there is no name for the tibbles and so they are being truncated as names. In the dots_cols() function is where it occurs.

crossing(
  tibble(a = c("a", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"),
         b = c(TRUE, TRUE)),
  tibble(c = c("a", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"),
         d = c(TRUE, TRUE)))

# names(dots)
# [1] "tibble(...)" "tibble(...)"

As compared to a shorter character string;

# names(dots)
# [1] "tibble(...)" "tibble(c = c(\"a\", \"aaaaaaaaaaa\"), d = c(TRUE, TRUE))"

@hadley hadley added bug an unexpected problem or unintended behavior grids #️⃣ expanding, nesting, crossing, ... labels Feb 17, 2021
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 grids #️⃣ expanding, nesting, crossing, ...
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants