@@ -330,33 +330,35 @@ set_spaces <- function(spaces_after_prefix, force_one) {
330
330
# ' @return A nested parse table.
331
331
# ' @keywords internal
332
332
nest_parse_data <- function (pd_flat ) {
333
- if (all(pd_flat $ parent < = 0L )) {
334
- return (pd_flat )
333
+ repeat {
334
+ if (all(pd_flat $ parent < = 0L )) {
335
+ return (pd_flat )
336
+ }
337
+ pd_flat $ internal <- with(pd_flat , (id %in% parent ) | (parent < = 0L ))
338
+ split_data <- split(pd_flat , pd_flat $ internal )
339
+
340
+ child <- split_data $ `FALSE`
341
+ internal <- split_data $ `TRUE`
342
+
343
+ internal $ internal_child <- internal $ child
344
+ internal $ child <- NULL
345
+
346
+ child $ parent_ <- child $ parent
347
+
348
+ rhs <- nest_(child , " child" , setdiff(names(child ), " parent_" ))
349
+
350
+ nested <- left_join(internal , rhs , by = c(" id" = " parent_" ))
351
+
352
+ children <- nested $ child
353
+ for (i in seq_along(children )) {
354
+ new <- combine_children(children [[i ]], nested $ internal_child [[i ]])
355
+ # Work around is.null(new)
356
+ children [i ] <- list (new )
357
+ }
358
+ nested $ child <- children
359
+ nested $ internal_child <- NULL
360
+ pd_flat <- nested
335
361
}
336
- pd_flat $ internal <- with(pd_flat , (id %in% parent ) | (parent < = 0L ))
337
- split_data <- split(pd_flat , pd_flat $ internal )
338
-
339
- child <- split_data $ `FALSE`
340
- internal <- split_data $ `TRUE`
341
-
342
- internal $ internal_child <- internal $ child
343
- internal $ child <- NULL
344
-
345
- child $ parent_ <- child $ parent
346
-
347
- rhs <- nest_(child , " child" , setdiff(names(child ), " parent_" ))
348
-
349
- nested <- left_join(internal , rhs , by = c(" id" = " parent_" ))
350
-
351
- children <- nested $ child
352
- for (i in seq_along(children )) {
353
- new <- combine_children(children [[i ]], nested $ internal_child [[i ]])
354
- # Work around is.null(new)
355
- children [i ] <- list (new )
356
- }
357
- nested $ child <- children
358
- nested $ internal_child <- NULL
359
- nest_parse_data(nested )
360
362
}
361
363
362
364
# ' Combine child and internal child
0 commit comments