Hier ist ein Beispiel, das den Fehler reproduziert.
> df <- tibble(x = c("a", "b", "c"), y = list(a = 1:3, b = 4:6, c = 7:9), z = list(1:3))
> df
# A tibble: 3 x 3
x y z
<chr> <list> <list>
1 a <int [3]> <int [3]>
2 b <int [3]> <int [3]>
3 c <int [3]> <int [3]>
> unnest(df)
Error: All nested columns must have the same number of elements.
Ich stelle jedoch fest, dass das Schneiden des gesamten Datenrahmens und das Aufheben der Verschachtelung funktioniert
> df %>% slice(1:n()) %>% unnest()
# A tibble: 9 x 3
x y z
<chr> <int> <int>
1 a 1 1
2 a 2 2
3 a 3 3
4 b 4 1
5 b 5 2
6 b 6 3
7 c 7 1
8 c 8 2
9 c 9 3
Hallo @yuanwxu , nur ein weiteres Community-Mitglied hier.
Hier ist ein etwas minimalerer Reprex dessen, was meiner Meinung nach das Problem ist:
Problem
library(tidyverse)
df1 <- tibble(x = c("a"), y = list(1:3), z = list(4:6))
df1 %>% unnest()
#> # A tibble: 3 x 3
#> x y z
#> <chr> <int> <int>
#> 1 a 1 4
#> 2 a 2 5
#> 3 a 3 6
# add name to list in y causes issue
df2 <- tibble(x = c("a"), y = list(foo = 1:3), z = list(4:6))
df2 %>% unnest()
#> Error: All nested columns must have the same number of elements.
Problemumgehung
Eine andere mögliche Problemumgehung anstelle des Slicens könnte darin bestehen, zuerst die Listenspalten aufzuheben
df2 %>% mutate_if(is.list, unname) %>% unnest()
#> # A tibble: 3 x 3
#> x y z
#> <chr> <int> <int>
#> 1 a 1 4
#> 2 a 2 5
#> 3 a 3 6
Warum passiert das?
Wenn ich mir den Code anschaue, denke ich, dass dieses Verhalten von
https://github.com/tidyverse/tidyr/blob/cbdd14e90b2a771e242a44d1ed5eea84d53da642/R/unnest.R#L96 -L100
Wenn wir das für unser Beispiel anpassen, können wir sehen, warum die Fehlermeldung auftritt:
# lengths considered the same
n1 <- df1 %>% select(-x) %>% map(~ map_int(., NROW))
n1
#> $y
#> [1] 3
#>
#> $z
#> [1] 3
length(unique(n1))
#> [1] 1
# lengths considered different
n2 <- df2 %>% select(-x) %>% map(~ map_int(., NROW))
n2
#> $y
#> foo
#> 3
#>
#> $z
#> [1] 3
length(unique(n2))
#> [1] 2
Sieht so aus, als müssten wir die Namen hier entfernen.
Ich werde daran für den Dev Day arbeiten.
Hilfreichster Kommentar
Hallo @yuanwxu , nur ein weiteres Community-Mitglied hier.
Hier ist ein etwas minimalerer Reprex dessen, was meiner Meinung nach das Problem ist:
Problem
Problemumgehung
Eine andere mögliche Problemumgehung anstelle des Slicens könnte darin bestehen, zuerst die Listenspalten aufzuheben
Warum passiert das?
Wenn ich mir den Code anschaue, denke ich, dass dieses Verhalten von
https://github.com/tidyverse/tidyr/blob/cbdd14e90b2a771e242a44d1ed5eea84d53da642/R/unnest.R#L96 -L100
Wenn wir das für unser Beispiel anpassen, können wir sehen, warum die Fehlermeldung auftritt: