在 RStudio 下使用 R 的基本功能

分類:IT技術 時間:2016-10-12

在 RStudio 下使用 R 的基本功能

概述

在前一節中已經提及,R 的核心是命令行界面的命令解釋器。所有的 R 代碼都被輸入到解釋器中,由其來執行並返回結果。 在 RStudio 中,Console 窗口是四個窗口中唯一一個沒有標簽頁的。也就是說,無論如何你總是需要與 Console 打交道。

RStudio 的項目(project)功能使得用戶很自然地把不同內容的工作區分開來,每個項目有各自的工作目錄(working directory)、工作空間(workspace)和源文件。

繼續之後的章節前,我們建議您已經獲取或配置了可以使用的最新版本 R + RStudio 環境,不論是服務器版或桌面版均可。本節中所介紹的基本功能均不需要安裝任何不隨 R 附帶的包。

1. 在 Console 中工作

RStudio Console 包含了多種功能,目的是為了使與 R 的交互更直接和高效。熟練掌握這些,並輔以 Source 和 History 窗口中的相關功能,可以迅速帶來極大的收獲,提升你的整體生產力。

代碼補全

R 默認加載了許多函數,隨著分析的深入,你的 workspace 中還會有許多對象。在對於函數名記憶不準確,或對象名太長輸入不便時,代碼補全功能可以幫助你快速找到和輸入當前 workspace 中你想找到的任何對象和函數。

RStudio 支持以 Tab 鍵來觸發命令補全。比如說,在你的 workspace 中有一個叫做

pollResults
的對象,你只需在命令行中輸入
poll
並按下 Tab 鍵,RStudio 就會自動幫你補全
pollResults

代碼補全同時提供函數的簡單幫助功能。比如當你輸入

sub
並按下 Tab 鍵時,你會看到:

這時,

subset
函數的簡介和參數接口也會被同時顯示出來。

代碼補全也能在函數內使用,提供函數參數的補全和幫助。如果你輸入

subset(
並按下 Tab,你會看到如下的界面:

用上下鍵選擇你需要輸入的參數,按回車確認。按 F1 則可打開函數的詳細幫助頁面。

需要補充的是,未安裝或未加載的包的幫助是不會顯示的。如果你發現你想找的函數不能自動補全,請先檢查你是否已經加載了包含這個函數的包,或已經輸入的部分是否有錯誤(R 是大小寫敏感的,大小寫輸錯時也不會自動補全)。

獲取之前的命令

命令行交互的特點是一次只能輸入一條命令(雖然這一條也可以是好幾行)。所以大多數時候,我們使用 Console 時是逐行輸入的,Console 也在讀入一行後立即執行,執行完成後再讀入下一行。在這種時候,如果我們可以重新獲取之前輸入的命令重新執行或加以修改,就可以避免大量的手工輸入。

在 RStudio Console 中,你可以使用鍵盤的上下鍵來逐行讀取之前輸入過的命令。

如果覺得逐行讀取太慢,想要立即找到好幾條之前輸入的命令,你可以使用 control + up 來獲得最近輸入的命令列表,並直接在列表中選擇,如下圖:

還嫌不夠快的話,試試輸入想查找的命令的一部分後,再按 control + up,可以直接查找輸入過的符合這個前綴的命令,如下圖:

Console 的標題欄

這張截圖顯示了 Console 窗口的一些其他功能:

  • 顯示當前工作目錄
  • 在代碼的計算時間過長時中止 R。
  • 最大/最小化 Console 窗口,同時也會最小/最大化和其擺放在同一側的另一個窗口。通過點擊右上角的圖標或雙擊標題欄均可。

[1] RStudio Documentation, Working in the Console http://www.rstudio.com/ide/docs/using/console


2. 使用編輯器來編輯和執行代碼

概述

RStudio 的 Source 窗口中包括了各種提高生產力的功能,包括語法高亮,代碼自動補全(同 Console 中的一致),多文件編輯和查找/替換。

在編輯器中編輯和執行代碼是更多 R 開發者喜愛的方式。在僅僅需要執行幾行較短的代碼時,可能更多人會選擇使用 Console 窗口直接輸入。但如果需要編輯並重用很多行代碼,甚至將他們組織為一個函數,逐行鍵入的方式則顯得不那麽簡便,並且 Console 本來也不是為這樣的使用方式所設計的。

RStudio 的文本編輯器可以適用於大部分 R 或與 R 有關的語言寫就的代碼。根據當前編輯的源文件語言的不同,其上方的工具欄也會顯示出不同的功能按鈕,滿足各個不同語言的需要。熟練掌握編輯器的操作可以極大地提升你的生產力。

管理多個源文件

而 Source 窗口就是專門被設計來編輯長段代碼的。其上方的標簽頁設計,可以使得你同時打開多個源文件,並在這些源文件之間切換。如果源文件過多,還可以搜索特定的文件名,見下圖:

對於 RStudio File -> New 菜單下可以新建的各個類型的文本文件,RStudio 都提供代碼中關鍵字的高亮顯示(新版本中支持的文件類型已經不止截圖中這些了)。有許多類型的文件現在可能還用不到,但大部分都會在將來的章節中介紹。

提取函數

RStudio 可以分析某一代碼段,並自動將其轉換成一個可重復使用的函數。任何在選擇的代碼內的“自由的”變量,即那些被引用但沒有被創建的變量,將被轉化為函數的參數:

這種情況在編寫某個大型程序中的一小段時非常實用:在編寫時,常常會使用一些測試數據集來檢查分析的每一步是否正確。而在寫完後,將代碼中測試數據集的賦值的部分刪去,這樣剩下的代碼段中,原先測試的數據集就變成了“被引用但沒有被創建的變量”。接著對這段代碼提取函數,即可生成執行這段分析的代碼的函數,而原先的測試數據集就變為了函數的參數。

註釋和縮進

關於這一部分,Google 的 R Style Guide 中建議了一些編寫 R 代碼時的良好風格[1],但也有人爭辯說,Google 並不應該被視為 R 的權威[2]。無論如何,良好的編程風格是為了讓人更容易讀懂你的代碼(代碼本身就是寫給人看的),統一的註釋和縮進格式只是一種手段而已。

在 RStudio 的 Source 窗口中,你可以使用 Ctrl + Shift + C 來註釋或去除註釋。

在你編寫 R 代碼時,RStudio 編輯器會幫助你自動縮進代碼,並且在以下情況時會自動重新縮進你的代碼:

  1. 當新的代碼被粘貼進 Source 編輯器時(可在 Code Editing 中設置)。
  2. 當你選擇上圖中的 Reindent Lines 命令時。

執行代碼

RStudio 支持在編輯器中直接執行代碼:代碼將被插入到 Console 窗口中並執行,其結果也將同時顯示。

執行單行代碼

若想要當前執行當前指針所在的一行代碼,你可以按下 Ctrl + Enter 鍵(或使用 Source 窗口標題欄上的 Run 按鈕):

執行完一行後,RStudio 會自動把指針移動到下一行,這樣你就可以在手不離開鍵盤的情況下逐行執行代碼段,並查看其運行結果。

執行多行代碼

RStudio 支持三種同時執行多行代碼的方式:

  1. 選擇多行代碼,按下 Ctrl + Enter 鍵(或使用 Source 窗口標題欄上的 Run 按鈕)。
  2. 在運行完某一段代碼後,按下 Ctrl + Shift + P 鍵(或對應的標題欄按鈕),即可重新運行上一次運行的代碼段(單行或多行)。該命令並不是簡單的讀取執行的歷史來重新執行,而是會把當前版本的代碼段重新執行(即使和上一次相比已經修改過了)。
  3. 如要執行整個文件,可以按下 Ctrl + Shift + Enter 鍵(或使用標題欄上的 Source 按鈕)。這樣做的好處是可以整個文檔會被保存為一個臨時文件,然後輸入 Console,在 Console 中的代碼不會被重新顯示一遍(選擇 Source with Echo 則會顯示)。
Source on Save

這是一個較奇怪的選項,但當你掌握它的用法後它其實非常好用。在分析時我們往往有這樣兩種類型的代碼:re-usable functions 和 freestanding lines。通常,我們將固定的方法編寫為 re-usable 的函數,而使用 freestanding 的幾行 R 代碼來整理實際的、千奇百怪的數據,並調用這些函數來分析。

在這裏,這些 re-usable functions 是作為 freestanding lines 的“資源”存在的。 通常這些函數需要一直被加載於工作空間中,以協助主要代碼的分析工作。這時,如果更新了這些 re-usable functions 的代碼而忘記執行,則工作空間中的函數不會更新,代碼執行的結果也無法查看到。

RStudio 提供這個選項的目的就是建議我們在遇到上述的使用情況時,將那些 re-usable functions 組織在一個單獨的文件中,並勾選這個選項。這樣這個文件的任何更新,只要一經保存都會直接同步於工作空間中,可供其他代碼調用。

代碼折疊和分段

代碼折疊

RStudio 支持自動的或用戶自定義的代碼段折疊。代碼折疊使得編輯器窗口更簡潔,尋找代碼段更迅速。比如在下圖中,函數

plot.autoregressive.model
的內容就被折疊了起來:

點擊行號邊的小箭頭或括號內的箭頭圖標均可展開這段代碼。

代碼分段

如果代碼中更多的是如上圖示意的函數等內容,由於其本來就是可折疊的,則並不需要再將代碼分段並折疊了。可若是代碼大多是以 freestanding lines 的形式存在,則自定義的代碼分段和折疊就非常有用。以下的代碼已經被分為了三段,其中前兩段被折疊了:

如果你希望新插入一個“代碼段”的話,你可以使用 Code -> Insert Section 命令。更簡單的方法是,任何以四個或以上的 dashes (-), equal signs (=), 或 pound signs (#) 結尾的註釋行,都會被視為分段符。比如說如下的三種註釋行都會自動生成新的一段:

# Section One ---------------------------------

# Section Two =================================

### Section Three ############################# 

使用下方的導航欄,可以在不同的代碼段中快速切換:

這些功能對於較長的代碼的編輯和整理非常有用。寫註釋除了幫助閱讀代碼的人理解外,常常也就是為了分段的。而現在只需在寫註釋時加上一些標記,代碼就自動被分為了可折疊、可快速導航的段落。

[1] Google's R Style Guide: http://google-styleguide.googlecode.com/svn/trunk/Rguide.xml

[2] Stackoverflow, an answer and its comments to the question: When does it pay off to use S4 methods in R programming? http://stackoverflow.com/a/3602729

[3] RStudio Documentation, Editing and Executing Code http://www.rstudio.com/ide/docs/using/source

[4] RStudio Documentation, Code Folding and Sections http://www.rstudio.com/ide/docs/using/code_folding


3. 項目、工作目錄和工作空間

概述

創建項目

若想要創建一個新的 RStudio 項目,你可以點選菜單項 *Project ->> Create Project *,該選項也可在 RStudio 界面右上方的項目快捷方式中找到。

你可以從以下三種文件夾來創建一個 RStudio 項目:

前兩種就是普通的空文件夾,而第三種涉及到版本控制系統(VCS)的特殊文件夾將在之後的章節中詳細介紹。

當一個新的項目被創建後:

  1. RStudio 在項目文件夾中自動創建一個項目文件(以
    .Rproj
    為後綴名)。這個文件的內容包含了各種項目的設置,也可以被當做在文件系統中直接打開項目的快捷方式。
  2. RStudio 在項目文件夾中自動創建一個隱藏文件夾(文件夾名為
    .Rproj.user
    )來存放項目臨時文件。這個文件夾會被自動添加到
    .Rbuildignore
    .gitignore
    ,這意味著大部分時候這個文件夾可以被忽略。
  3. 創建後,這個項目會被自動加載到當前打開的 RStudio 中。在之前提到的界面右上方的項目快捷菜單中,可以看到顯示的項目名。有時你打開了 RStudio, 你會發現編寫的代碼和存儲的數據集不在了,這往往都是由於本來你是在一個項目中工作,而現在這個項目沒有正確地被加載。而檢查右上角的項目名是最快捷的判斷當前加載的項目的方法。

Tags: 解釋器 服務器 生產力 源文件 標簽

文章來源:


ads
ads

相關文章
ads

相關文章

ad