Люди часто используют функции attach()
и detach()
для настройки "путей поиска" для имен переменных в R, но поскольку это изменяет глобальное состояние, которое трудно отслеживать, люди рекомендуют вместо with()
, которая устанавливает временное изменение пути поиска для продолжительности одного выражения.
Однако я только заметил, что в отличие от attach()
, with()
, по-видимому, не выполняет "разрешить" функции. Например, сначала настройте фиктивную функцию, которая будет обращаться к переменной с именем x
:
f <- function { print(x) }
Теперь,
with(list(x=42), f())
не удается, даже если
with(list(x=42), print(x))
и
attach(list(x=42))
f()
оба успеха!: (
Может ли кто-нибудь сказать мне, почему? Я бы хотел, чтобы with()
вел себя точно так же, как attach()
здесь, чтобы я мог эффективно передать большой список параметров функции, настроив среду, содержащую значения параметров, с помощью with()
. Я рассматриваю этот подход как имеющее несколько преимуществ по сравнению с альтернативами (два из них, которые я рассмотрел, (а) кропотливо передают все параметры в функцию и (б) явно передают в список/кадр параметров как аргумент функции и имеют сама функция вызывает with()
), но она не работает. Я нахожу это несоответствие довольно тревожным, чтобы быть честным! Любое объяснение/помощь будут оценены.
Я использую R 2.11.1.