Позволяет захватить среды "пространство имен: статистика" и "пакет: статистика"
ns = getNamespace( "stats" )
pkg = as.environment( "package:stats" )
Теперь давайте получим функцию "sd" в обоих:
nsSd = get( "sd" , envir = ns , inherits = FALSE )
pkgSd = get( "sd" , envir = pkg , inherits = FALSE )
Они одинаковы? Они есть! Но что означает "то же самое"? Ссылка или значение равенства?
identical( nsSd , pkgSd )
Это означает ссылочное равенство, так как следующее возвращает FALSE:
test1 = function() {}
test2 = function() {}
identical( test1 , test2 )
Но если это правда, это означает, что кадр среды может содержать указатели на функции вместе с объектами функции. Дальнейшее усложнение проблемы - факт, что функция может "жить" в одной среде, но функции можно сказать, что ее исполняющая среда является другой средой. Chambers SoDA, похоже, не имеет ответа (его плотная книга, может быть, я пропустил это!)
Итак, я бы хотел дать окончательный ответ. Что из следующего верно? Или здесь есть ложная трихотомия?
-
nsSd
иpkgSd
- это два разных объекта (хотя копии каждого другое), где объект вpkgSd
имеетns
в качестве его выполнения окружающая среда -
nsSd
иpkgSd
являются указателями на один и тот же объект. -
nsSd
является указателем наpkgSd
и как таковой они рассматриваются как идентичные