В чем разница между рабочим пространством и средой? - PullRequest
0 голосов
/ 01 апреля 2020

Введение в R говорит

Во время сеанса R объекты создаются и сохраняются по имени (мы обсудим этот процесс в следующем разделе). Команда R

> objects()

(альтернативно, ls ()) может использоваться для отображения имен (большей части) объектов, которые в данный момент хранятся в R. Коллекция объектов, хранящихся в данный момент, называется рабочее пространство .

Определение языка R говорит

2.1.10 Среды

Окружающая среда может рассматриваться как состоящая из двух вещей. Кадр, состоящий из набора пар символ-значение и вложенности, указатель на окружающую среду. Когда R ищет значение для символа, проверяется фрейм, и если найден соответствующий символ, возвращается его значение. Если нет, доступ к окружающей среде затем осуществляется, и процесс повторяется. Среды образуют древовидную структуру , в которой корпуса играют роль родителей.

3.5.1 Глобальная среда

Глобальная среда - это root из рабочего пространства пользователя . Операция присваивания из командной строки приведет к тому, что соответствующий объект будет принадлежать глобальной среде. Его окружающая среда является следующей средой на пути поиска и т. Д. Обратно в пустую среду, которая является оболочкой базовой среды.

В чем разница между рабочим пространством и средами ?

Является ли рабочее пространство текущей средой или текущим деревом сред или чем-то еще?

Спасибо.

1 Ответ

1 голос
/ 01 апреля 2020

Целью среды является привязка набора имен к набору значений ( Advanced R , стр. 124). Среды в R существуют в наборе отношений родитель / потомок, начиная с одной среды, у которой нет родителя, empty environment. Его дочерний элемент - base environment, среда базового пакета R.

При загрузке пакетов в сеанс R через library() среды для этих пакетов вставляются между base environment и global environment.

global environment - это среда, в которой хранятся определенные пользователем объекты в сеансе R. Эта среда является синонимом workspace и представляет область, где обычно работает пользователь R.

Список сред с функцией search() можно увидеть. Например, когда я запускаю RStudio, все пакеты, которые загружаются при запуске, перечислены в цепочке среды, начиная с пакета base:

> # after starting R, what environments exist?
> search()
 [1] ".GlobalEnv"        "tools:rstudio"     "package:stats"     "package:graphics" 
 [5] "package:grDevices" "package:utils"     "package:datasets"  "package:methods"  
 [9] "Autoloads"         "package:base"     
> 

Когда я загружаю другой пакет, он вставляется в цепь окружения между .GlobalEnv и tools:studio.

library(randomForest)
randomForest 4.6-14
Type rfNews() to see new features/changes/bug fixes.
> search()
 [1] ".GlobalEnv"           "package:randomForest" "tools:rstudio"       
 [4] "package:stats"        "package:graphics"     "package:grDevices"   
 [7] "package:utils"        "package:datasets"     "package:methods"     
[10] "Autoloads"            "package:base"        
> 

Когда R интерпретирует ссылку на объект, он сначала просматривает текущую среду (которая может быть вложением в глобальной среде), затем перемещается по цепочке родителей, пока не найдет объект с именем в исходной ссылке или достигает пустой среды. В Advanced R Хэдли Уикхем иллюстрирует путь поиска следующим образом.

Search Path -- Advanced R p. 127

Путь поиска важен, потому что если два или более пакета имеют объект с одинаковым именем, R разрешает ссылку с первым найденным совпадением в пути поиска.

R генерирует предупреждение, когда вновь загруженный пакет содержит объект, который маскирует объект в ранее загруженном пакете. Например, когда мы запускаем library(caret) в RStudio, R генерирует следующие сообщения.

> library(caret)
Loading required package: lattice
Loading required package: ggplot2

Attaching package: ‘ggplot2’

The following object is masked from ‘package:randomForest’:

    margin

> 

На этом этапе ссылка на функцию margin() будет использовать ссылку в ggplot2, а не randomForest. Однако мы можем использовать оператор :: для явной ссылки на имя пакета для объекта, например randomForest::margin().

Ссылка: Advanced R , Wickham, Hadley, CR C Press 2015.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...