- 大數據分析與應用實戰:統計機器學習之數據導向編程
- 鄒慶士編著
- 1317字
- 2022-07-28 20:15:31
1.2 環境與輔助說明
編寫程序時變量名稱的正式稱謂是符號(symbols),當我們指定一個對象(參見1.6節編程范式與面向對象概念)給某個變量名稱時,實際上就是指定該對象到當前環境(environment)中的一個符號。以R語言為例:

因此,反過來說,環境的定義是一組定義在相同情景(context)的符號集合。R語言中的一切都是對象(object),前述的符號、后面要談的函數與R表達式、此處的環境等都是對象。理解對象最簡單的方式就是把它想象成運用計算機表達出來的事物,而所有的R語言程序代碼都是在處理對象,每個R指令的評價與求值(evaluation)都與某個環境有關(Adler,2012)。
一般而言,R語言有四個特殊環境 :
· globalenv()函數返回全局環境,亦稱為交互式工作空間(interactive workspace),它通常是用戶進行數據處理與建模等工作的當前環境。圖1.5顯示此環境包含任何用戶定義的對象,例如向量、矩陣、數組、數據集、列表、時間序列等數據對象(參見1.3節R語言數據對象)或函數對象。加載的各個套件與附加上的數據集會依序地串在全局環境之下,成為全局環境的父環境,這一長串的父子環境又稱為搜索路徑(search path),如圖1.6所示。圖中下方為父,上方為子,全局環境的父環境指的是先前使用library()或require()載入的一個個套件(library()與require()的區別請看https://yihui.name/en/2014/07/library-vs-require/)。1.1.2節提過的search()函數,列出了全局環境的所有父環境,因此可以檢查我們到底已經加載了哪些套件到內存中。

圖1.5 全局環境下的數據與函數
· baseenv()返回基本環境,顧名思義是前述第一類基本套件base package的環境,其父環境是下面的空環境(empty environment)。
· emptyenv()返回空環境,是所有環境最終的起源,也就是所有環境的祖先(ancestor),是唯一沒有父環境的環境。
· environment()返回當前的環境,如前所述,通常是第一點的全局環境。
search()函數除了可以檢查內存中加載了哪些套件,還可以看到attach()函數附加上的數據集,以方便用戶進行數據處理與分析,例如下面的longley數據集加載到內存后,可以直接引用數據集的變量名,無須輸入數據集名稱。雖然看似方便,但讀者應該思考有哪些缺點?attach()的反向執行就是detach(),可將搜索路徑下的數據集與套件從內存中刪除。

圖1.6 全局環境及其父環境圖



objects()和ls()函數也常用來查詢特定環境中的對象名稱,例如全局環境與基本環境中的對象。

除了環境外,當前工作目錄(或稱路徑)是R讀寫文件的默認文件夾,因此讀者需熟悉工作目錄的查詢與設定,方能順利地讀寫文件。

接下來簡單介紹輔助說明,R語言有相當豐富的輔助說明,help.start()返回核心開發團隊編制的使用手冊、套件參考指南與其他文件。

如果已經明確知道欲查詢的函數名或數據集名,可以使用help()函數或其別名(alias)運算符?。

若搜索名稱不確定時,則使用help.search()函數擴大搜索范圍,從套件短文(vignette)名稱、示范代碼與說明頁面(標題與關鍵詞)中搜索包含“plot”的字符串,??則為help.search()函數的別名。

上面搜索的范圍如果太大,可以使用apropos()函數只搜索函數名稱中包含字符串"plot"的函數。而find()函數是搜索包含plot函數的套件,參數simple.words=FALSE時會擴大搜索包含"plot"字符串的所有對象。

如欲在互聯網上尋求幫助,讀者可訪問下列網站并輸入搜索關鍵詞:
· Google: http://www.google.com/
· Rseek: http://rseek.org/
· Crantastic: http://crantastic.org/
Python語言可以使用pwd查詢當前的工作路徑,查閱輔助說明也是使用help()函數。當dir()函數不帶參數時,返回當前環境內的變量、方法和定義的類別;當dir()函數帶環境參數(即套件或對象)時,返回環境的屬性與方法(參見1.6節編程范式與面向對象概念)。
- Mastering Ext JS(Second Edition)
- JavaScript百煉成仙
- What's New in TensorFlow 2.0
- 無代碼編程:用云表搭建企業數字化管理平臺
- Scratch 3游戲與人工智能編程完全自學教程
- Python數據分析從0到1
- Modern JavaScript Applications
- Linux Device Drivers Development
- Learning DHTMLX Suite UI
- Node.js Design Patterns
- JSP程序設計實例教程(第2版)
- Building Serverless Architectures
- C語言程序設計實踐
- Machine Learning for OpenCV
- 視窗軟件設計和開發自動化:可視化D++語言