Я не уверен, когда простой смертный действительно захочет их использовать, но эти понятия полезны для понимания лексической сферы здесь
> f = function() x
> g = function() { x = 2; f() }
> h = function() { x = 3; function() x }
> x = 1
> f()
[1] 1
> g()
[1] 1
> h()()
[1] 3
или в загадочном примере банковского счета во введении к Р. Первый абзац раздела "Подробности" ?parent.frame может прояснить ситуацию.
Окружающие среды широко распространены в R, например, путь search() - это (приблизительно) среды, объединенные вместе в родстве родственников → родителей. Иногда наблюдается env = new.env(parent=emptyenv()), чтобы обойти поиск символа - обычно env[["x"]] будет выглядеть сначала в env, а затем в env parent, если не найден. Аналогично, <<- ищет назначение, начинающееся с parent.env. Относительно новая реализация эталонного класса в R полагается на эти идеи для определения среды, специфичной для экземпляра, в которой могут быть найдены символы (экземпляры полей и методов).