iT邦幫忙

0

十個超級好用的R語言程式設計技巧,一般人絕不知道!

由於R語言生態系統內容繁複並在不斷發展,人們往往容易忽視一些切實有用的知識。這些技巧往往非常簡單,但對於完成工作有很大的幫助。

本文將介紹十個能夠讓R語言程式設計工作更加輕鬆的小知識。

1. switch函數

在if語句基於其他變數值來選定某個值時,switch可以很方便地縮短if語句。這個技巧在程式設計中需要根據之前的抉擇載入一個不同的資料集時非常有用。比如說,現在有一個變數“animal”,程式設計需要根據animal是dog,cat還是rabbit來載入一個不同的資料集。利用switch函數,可以輸入以下程式碼:

data <-read.csv(switch(animal,"dog" ="dogdata.csv","cat" ="catdata.csv","rabbit" ="rabbitdata.csv"))

當需要根據一個或多個輸入功能表選擇在Shiny應用程式中載入不同的資料集甚至環境檔時,這個技巧非常有用。

2. RStudio快速鍵

和R hack軟體系統相比,RStudio IDE(IntegratedDevelopment Environment,整合式開發環境)中更常用到這一類技巧。這些常用命令的快速鍵非常有用,可以節省很多敲鍵盤的時間。比如Ctrl+Shift+M(用於管道操作符%>%)和Alt+-(用於設定運算子<-)兩個快速鍵。想要瞭解更多方便好用的快速鍵,可以在RStudio中輸入Atl+Shift+K查看。

3. flexdashboard包

如果想要創建一個能快速啟動和高效運行的Shiny儀錶盤,可以選擇flexdashboard。這個包提供簡單的HTML快捷方式,可以簡化側邊欄創建和構建行列展示。還有超級便捷的標題列,可以把應用程式編譯到不同的頁面,以及把圖示和連結放入Github程式碼和郵寄地址等。

由於flexdashboard包基於RMarkdown進行操作,它允許把所有應用程式放在一個Rmd檔中,而不必像shinydashboard那樣把程式分成獨立的伺服器和UI(User Interface,使用者介面)檔。在需要創建一個簡單的儀錶盤初始版本並將其併入更高級的設計版本時,flexdashboard包十分好用。利用flexdashboard包可以在一個小時內啟動和運行儀錶盤。

4. R Shiny中的req函數和validate函數

R Shiny常常讓人崩潰,特別是在彈出一般性錯誤提醒而程式師又一頭霧水的時候。隨著Shiny的發展,越來越多的驗證函數和測試函數加入了Shiny,説明程式師更好地診斷和提醒錯誤。

當操作環境中沒有其他變數時,req()函數可以悄無聲息地阻止一個操作的發生,並且不彈出錯誤提醒。程式師因而可以在此前的操作中有條件地展示UI元件。以第一個小技巧中提到的例子為例:

output$go_button<- shiny::renderUI({# only display button if an animal input hasbeen chosenshiny::req(input$animal)# display buttonshiny::actionButton("go",paste("Conduct", input$animal, "analysis!"))})

validate()函數則可以在輸出結果前進行檢查。如果某個條件沒有滿足,特定的錯誤提醒會彈出。比如說當使用者上傳了錯誤的檔時:

get csv inputfileinFile <-input$file1data <-inFile$datapath# render table onlyif it is dogsshiny::renderTable({# check that it is the dog file, not cats orrabbitsshiny::validate(need("Dog Name" %in%colnames(data)),"Dog Name column not found - did youload the right file?")data})

5. 利用系統環境保密所有憑證

如果在分享程式碼時,設定了資料庫登錄憑證或類似的設定,可以利用系統環境,防止憑證被上傳到Github或其他地方造成程式碼洩露。可以把這些憑證作為命名環境變數放在R session中。比如:

Sys.setenv(DSN = "database_name",UID = "User ID",PASS = "Password")

這些環境變數可以用來登錄分享的腳本。比如:

db <-DBI::dbConnect(drv = odbc::odbc(),dsn = Sys.getenv("DSN"),uid = Sys.getenv("UID"),pwd = Sys.getenv("PASS"))

更加簡便的是,如果頻繁使用某些憑證,可以在作業系統中把它們設定為環境變數。如此,用R語言系統工作時,便無需在程式碼中輸入就可以隨時使用這些憑證。(注意有憑證權限的人。)

6. styler自動生成tidyverse風格

介面上有很多程式碼,然而它們並不像你想要的那樣整潔,你也沒有時間進行多線編輯。不要擔心。styler包有多個函數可以自動編輯程式碼,生成tidyverse風格。只需要簡單地運行styler::style file(),它就會完成大部分(並不是所有)的工作。

7. 引數化R Markdown文件

當你分析了一大堆關於狗的事實並寫完一個滿意的R Markdown檔時,你被告知,「我還是對貓更感興趣」。這要怎麼辦呢?不要擔心。如果引數化了R Markdown檔,只要透過一個命令,就可以自動生成一份相似的關於貓的報告。

具體來說,需要在R Markdown檔的YAML標頭中設定引數,並給每個引數賦值。比如:

— -

title: "AnimalAnalysis"author: "KeithMcNulty"date: "21March 2019"output:html_document:code_folding: "hide"params:animal_name:value: Dogchoices:- Dog- Cat- Rabbityears_of_study:input: slidermin: 2000max: 2019step: 1round: 1sep: ''value: [2010, 2017]--

然後只需把這些變數用R語言,如params$animal_name和params$years_of_study寫進檔中就可以了。如果正常轉換檔,那麼每個引數就會被設定成預設值。但是,如果在轉換檔選擇引數時,選擇了RStudio中Knit下拉清單中的選項(或使用了kint_with_parameters()函數),一個功能表就會出現,來在轉換檔前選擇引數。非常棒!

引數轉換

8. revealjs包

revealjs包內嵌R程式碼,可以使用直觀的幻燈片導航功能表在HTML中創建賞心悅目的演示文稿。它可以在R Markdown中使用,並有非常直觀的HTML快捷方式,可以創建具有嵌套和邏輯結構的各種風格的漂亮幻燈片。HTML格式的演示文稿也意味著人們在聽演講時可以繼續使用平板電腦或手機。這真的很方便。可以透過安裝包並在YAML標頭中調用來設定一個revealjs演示文稿。下面展出了使用revealjs做的一個演講的YAML標頭。

title:"Exporing the Edge of the People Analytics Universe"author: "KeithMcNulty"output:revealjs::revealjs_presentation:center: yestemplate: starwars.htmltheme: blackdate: "HRAnalytics Meetup London - 18 March, 2019"resource_files:- darth.png- deathstar.png- hanchewy.png- millenium.png- r2d2-threepio.png- starwars.html- starwars.png- stormtrooper.png---

程式碼傳送門:https://github.com/keithmcnulty/hr_meetup_london/blob/master/presentation.Rmd

演示文稿傳送門:http://rpubs.com/keithmcnulty/hr_meetup_london

9. R Shiny中的HTML標籤(以在Shiny應用程式中播放音訊為例)

R Shiny中有110種HTML標籤,可以為各種各樣的HTML命令,如格式化,提供快捷方式。然而,大部分人都沒有充分利用這些標籤。比如創建了一個shiny應用程式,該程式在執行某個任務時需要花費大量的時間。使用者希望在等待完成該任務的過程中,能夠執行其他的多項任務,所以可以利用tags$audio這一標籤,讓該應用程式在完成任務時播放勝利號角來提醒使用者。

10. praise包

praise包具有極其簡單但十分有用的功能,即讚美用戶。儘管這一功能看起來是毫無意義的自我讚賞,它實際上發揮著巨大的作用。它可以在用戶成功地完成一個任務時,對用戶進行讚美或鼓勵。程式師也可以把這個包放在已完成的腳本的最後,在程式順利運行之後享受它帶來的幸福瞬間。

轉載自:https://www.kdnuggets.com/2019/06/ten-useful-things-r.html

>>>

我是「數據分析那些事」。常年分享資料分析乾貨,不定期分享好用的職場技能工具。可以關注我的臉書,第一時間掌握我的動態~


尚未有邦友留言

立即登入留言