Я разрабатываю пакет для R, и я хотел бы установить некоторые значения по умолчанию для всего пакета с возможностью их изменения позже.Я знаю, что это звучит как глобальные переменные и, следовательно, зло, но мне нужно это для управления профилированием и отладкой, а также для настройки бэкэнда (пакет может использовать различные внешние программы для своей работы, и я называю их бэкэндами).
Все эти три параметра должны изменяться одновременно для всех функций в стеке вызовов.Например, если я звоню mypackage::function1(profiling = T)
и function1
, звонит mypackage::function2
и mypackage::function3
, я бы хотел, чтобы профилирование было включено для тех, кого это касается.Одним из решений может быть сделать mypackage::turn.on.profiling()
и сделать так, чтобы все функции ссылались на некоторую переменную пакета, но это требует хитрости с заблокированными средами и тому подобным.
Другим может быть динамическое определение области действия, моделируемое, хотя sys.frame
семейство функций (то есть, когда профилирование включено, оно включено для чего-либо ниже этой точки в стеке).Не говорите мне, что профилирование в R не работает так, потому что это другой тип профилирования, построенный поверх существующего, но другой.
У меня нет сомнений, что я могу взломать его одинтак или иначе, но мне было интересно, есть ли каноническое решение или, по крайней мере, какой-то прецедент в CRAN для чего-то такого, чтобы я не изобретал колесо.