разному ведет себя в interative и batch, может кто то подскажет?
На входе: json с вложенными списками, некоторые равны NULL, поэтому используется fill = TRUE.
Но в режиме запуска он просто игнорирует эту колонку, тогда как в ручном все делает правильно.
Выглядит примерно так, отваливается колонка с2 в этом примере:
Mylist <- list(item1 = list(a = "one",
b = 2,
c = list(
c1 = TRUE,
c2 = NULL)),
item2 = list(a = "test",
b = 3,
c = list(
c1 = FALSE,
c2 = NULL)),
item3 = list(a = "txtxt",
b = 2,
c = list(c1 = TRUE,
c2 = TRUE)))
в batch - это как? через source?
возможно неправ, но здесь имел ввиду "запускается CRONом" автоматически
Идентично все ведет себя и в консоли и в коде. И ничего не пропадает, он превращает c в колонку. Только не может в атомарный вектор из-зи NULL превратить, поэтому останавливается на list-column. Он и не должен был делать колонки c1 и c2, если об этом речь идет. Преобразование иерархических json — совсем другая песня. ll <- list( item1 = list(a = "one", b = 2, c = list( c1 = TRUE, c2 = NULL)), item2 = list(a = "test", b = 3, c = list( c1 = FALSE, c2 = NULL)), item3 = list(a = "txtxt", b = 2, c = list( c1 = TRUE, c2 = TRUE)) ) df <- data.table::rbindlist(ll, fill = TRUE) dplyr::glimpse(df) #> Rows: 6 #> Columns: 3 #> $ a <chr> "one", "one", "test", "test", "txtxt", "txtxt" #> $ b <dbl> 2, 2, 3, 3, 2, 2 #> $ c <list> TRUE, <NULL>, FALSE, <NULL>, TRUE, TRUE dplyr::bind_rows(ll) #> # A tibble: 6 x 3 #> a b c #> <chr> <dbl> <named list> #> 1 one 2 <lgl [1]> #> 2 one 2 <NULL> #> 3 test 3 <lgl [1]> #> 4 test 3 <NULL> #> 5 txtxt 2 <lgl [1]> #> 6 txtxt 2 <lgl [1]> sessionInfo() #> R version 4.1.0 Patched (2021-05-29 r80411) #> Platform: x86_64-w64-mingw32/x64 (64-bit) #> Running under: Windows 10 x64 (build 19043) #> #> Matrix products: default #> #> locale: #> [1] LC_COLLATE=Russian_Russia.1251 LC_CTYPE=Russian_Russia.1251 #> [3] LC_MONETARY=Russian_Russia.1251 LC_NUMERIC=C #> [5] LC_TIME=Russian_Russia.1251 #> #> attached base packages: #> [1] stats graphics grDevices utils datasets methods base #> #> loaded via a namespace (and not attached): #> [1] rstudioapi_0.13 knitr_1.33 magrittr_2.0.1 tidyselect_1.1.1 #> [5] R6_2.5.0 rlang_0.4.11 fansi_0.5.0 dplyr_1.0.6 #> [9] stringr_1.4.0 styler_1.4.1 highr_0.9 tools_4.1.0 #> [13] data.table_1.14.0 xfun_0.24 utf8_1.2.1 cli_2.5.0 #> [17] DBI_1.1.1 withr_2.4.2 htmltools_0.5.1.1 ellipsis_0.3.2 #> [21] assertthat_0.2.1 yaml_2.2.1 digest_0.6.27 tibble_3.1.2 #> [25] lifecycle_1.0.0 crayon_1.4.1 purrr_0.3.4 ps_1.6.0 #> [29] vctrs_0.3.8 fs_1.5.0 glue_1.4.2 evaluate_0.14 #> [33] rmarkdown_2.9 reprex_2.0.0 stringi_1.6.2 compiler_4.1.0 #> [37] pillar_1.6.1 generics_0.1.0 backports_1.2.1 pkgconfig_2.0.3 Created on 2021-06-17 by the reprex package (v2.0.0)
я наверное не идеальный пример привел, но разворачивает в обычном режиме в колонки спокойно, и ранее тоже делал. Спасибо за подробный ответ
нет понятия "обычный режим". и не должен он разворачивать. он сливает на верхнем уровне. содержимое элементов списка матчит либо по позиции, либо по имени. глубже не лезет
тем не менее, при запуске "руками" все получается, как нужно, а через крон пропадает колонка. в какую сторону смотреть?
Что именно получается? Можно воспроизводимый пример привести?
ок я попробую почистить комм данные и скинуть максимально близкий
это не нужно. Достаточно нескольких строк. Продемонстрировать, что именно наблюдается. Вообще, не стоит опираться на визуальное представление в редакторе — оно проходит сложную обработку. Смотрите на внутреннее представление. Корректируем исходный пример: ll <- list( item1 = list(a = "one", b = 2, c = list( c1 = TRUE, c2 = "gg")), item2 = list(a = "test", b = 3, c = list( c1 = FALSE, c2 = NULL)), item3 = list(a = "txtxt", b = 2, c = list(c( c1 = TRUE, c2 = TRUE))) ) df <- data.table::rbindlist(ll, fill = TRUE) Смотрим внутреннее представление и печатный вывод на экран: > dput(df) structure(list(a = c("one", "one", "test", "test", "txtxt"), b = c(2, 2, 3, 3, 2), c = list(TRUE, "gg", FALSE, NULL, c(c1 = TRUE, c2 = TRUE))), row.names = c(NA, -5L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x00000179638f1ef0>) > df a b c 1: one 2 TRUE 2: one 2 gg 3: test 3 FALSE 4: test 3 5: txtxt 2 TRUE,TRUE В RStudio просмотрщике это выглядит как на картинке. Правда в dput
Обсуждают сегодня