Люди часто используют функции 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 ()
, чтобы я мог эффективно передавать большой список параметров в функцию, настроив среду, содержащую значения параметров, с помощью с ()
. Я считаю, что этот подход имеет несколько преимуществ по сравнению с альтернативами (два, которые я рассмотрел: функция, и (б) явная передача списка / фрейма параметров в качестве аргумента функции и вызов самой функции с ()
), но это не работает.Честно говоря, я нахожу это несоответствие довольно тревожным! Приветствуются любые объяснения / помощь.
Я использую R 2.11.1.