Слегка различается поведение with () и attach () в R?

Люди часто используют функции 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.

11
задан Community 23 May 2017 в 12:23
поделиться