Я хочу dump()
некоторых объектов, но, к сожалению, dump()
недостаточно надежен:
x = 5
# ok
dump('x', stdout())
# x <-
# 5
# bad / incomplete
dump('.GlobalEnv', stdout())
# .GlobalEnv <-
Ошибка в дампе (". GlobalEnv", stdout ()): ( преобразуется из предупреждения) deparse может быть неполным
В простом случае это можно преодолеть с помощью самого dump
:
# option 1; can be reversed by wrapping in
# list2env(within(list(), { . }))
e = new.env()
e$x = 5
dump(ls(e), stdout(), envir = e)
# x <-
# 5
# option 2; can be reversed by wrapping in
# list2env( . )
e = as.list(e)
dump('e', stdout())
Однако, это разваливается во вложенном сценарии ios:
l = list(e = new.env())
l$e$x = 5
# same error as before
dump('l', stdout())
В этом случае желаемым результатом будет все, что может воспроизвести l
с source
, например,
l <-
list(e = list2env(within(list(), {
x <-
5
})))
Это рекурсивная проблема, но я немного застрял в том, как точно go об этом точно сказать.
Существует также проблема, связанная с тем, что среды могут быть действительно рекурсивными (среда e
содержит e
сама); Я бы проигнорировал это для целей здесь.