《R for Data Science (2e)》免費中文翻譯 (第6章) --- scripts and projects

寫在前面

本系列推文為《R for Data Science (2)》的中文翻譯版本。所有內容都通過開源免費的方式上傳至Github,歡迎大家參與貢獻,詳細信息見:
Books-zh-cn 項目介紹:
Books-zh-cn:開源免費的中文書籍社區
r4ds-zh-cn Github 地址:
https://github.com/Books-zh-cn/r4ds-zh-cn
r4ds-zh-cn 網站地址:
https://books-zh-cn.github.io/r4ds-zh-cn/


目錄

  • 6.1 腳本

  • 6.2 項目

  • 6.3 練習

  • 6.4 總結

本章將向您介紹組織代碼的兩個基本工具:腳本(scripts)和項目(projects)。

6.1 腳本

到目前為止,您已經使用控制臺(console)來運行代碼。這是一個很好的起點,但是當您創建更復雜的 ggplot2 圖形和更長的 dplyr 管道時,您會發現它很快就會變得擁擠。為了給自己更多的工作空間,請使用腳本編輯器。單擊 File 菜單,選擇 New File,然后選擇 R script,或使用鍵盤快捷鍵 Cmd/Ctrl + Shift + N 將其打開。現在您將看到四個窗格,如 Figure 6.1 所示。腳本編輯器是試驗代碼的好地方。當您想要更改某些內容時,不必重新輸入整個內容,只需編輯腳本并重新運行即可。一旦您編寫了可以運行并執行您想要的操作的代碼,您就可以將其保存為腳本文件,以便稍后輕松返回。

?

Figure 6.1: 打開腳本編輯器會在 IDE 的左上角添加一個新窗格。

6.1.1 運行代碼

腳本編輯器是構建復雜 ggplot2 繪圖或長序列 dplyr 操作的絕佳場所。有效使用腳本編輯器的關鍵是記住最重要的鍵盤快捷鍵之一:Cmd/Ctrl + Enter。這將在控制臺中執行當前的 R 表達式。例如,采用下面的代碼。

library(dplyr)
library(nycflights13)not_cancelled?<-?flights?|>?filter(!is.na(dep_delay)█,?!is.na(arr_delay))not_cancelled?|>?group_by(year,?month,?day)?|>?summarize(mean?=?mean(dep_delay))

如果光標位于 █ 處,按 Cmd/Ctrl + Enter 將運行生成 not_cancelled 的完整命令。它還會將光標移動到以下語句(以 not_cancelled |> 開頭)。這樣可以通過重復按 Cmd/Ctrl + Enter 輕松地逐步執行完整的腳本。

您還可以使用 Cmd/Ctrl + Shift + S 一步執行完整的腳本,而不是逐個表達式地運行代碼。定期執行此操作是確保您捕獲腳本中代碼的所有重要部分的好方法。

我們建議您始終使用所需的包來啟動腳本。這樣,如果您與其他人共享代碼,他們可以輕松查看需要安裝哪些軟件包。但請注意,您絕對不應該在共享的腳本中包含 install.packages()。如果他們不小心的話,交出一個會改變他們計算機上某些內容的腳本是不體貼的!

在學習后續章節時,我們強烈建議從腳本編輯器開始并練習鍵盤快捷鍵。隨著時間的推移,以這種方式向控制臺發送代碼將變得如此自然,您甚至不會想到它。

6.1.2 RStudio 診斷

在腳本編輯器中,RStudio 將使用紅色波浪線和側邊欄中的十字來突出顯示語法錯誤:

?

將鼠標懸停在十字上即可查看問題所在:

?

RStudio 還會讓您了解潛在的問題:

?

6.1.3 保存和命名

當您退出時,RStudio 會自動保存腳本編輯器的內容,并在您重新打開時自動重新加載。盡管如此,最好避免使用 Untitled1、Untitled2、Untitled3 等,而是保存腳本并為它們提供信息豐富的名稱。

將文件命名為 code.Rmyscript.R 可能很誘人,但在為文件選擇名稱之前應該仔細考慮一下。文件命名的三個重要原則如下:

  1. 文件名應該是機器可讀的(machine readable):避免空格、符號和特殊字符。不要依靠大小寫來區分文件。

  2. 文件名應該是人類可讀的(human readable):使用文件名來描述文件中的內容。

  3. 文件名應該與默認順序配合良好:以數字開頭的文件名,以便按字母順序排序將它們按照使用的順序排列。

例如,假設項目文件夾中有以下文件。

alternative?model.R
code?for?exploratory?analysis.r
finalreport.qmd
FinalReport.qmd
fig?1.png
Figure_02.png
model_first_try.R
run-first.r
temp.txt

這里存在各種各樣的問題:很難找到先運行哪個文件、文件名包含空格、有兩個同名但大小寫不同的文件(finalreport vs. FinalReport)、有些名稱沒有描述其內容(run-first and temp)。

這是命名和組織同一組文件的更好方法:

01-load-data.R
02-exploratory-analysis.R
03-model-approach-1.R
04-model-approach-2.R
fig-01.png
fig-02.png
report-2022-03-20.qmd
report-2022-04-02.qmd
report-draft-notes.txt

對關鍵腳本進行編號可以清楚地顯示運行它們的順序,并且一致的命名方案可以更容易地看到差異。此外,數字的標簽類似,報告通過文件名中包含的日期進行區分,并且 temp 被重命名為 report-draft-notes 以更好地描述其內容。如果一個目錄中有很多文件,建議進一步組織,將不同類型的文件(scripts, figures, etc.)放在不同的目錄中。

6.2 項目

有一天,您需要退出 R,去做其他事情,然后再返回分析。有一天,您將同時進行多項分析,并且希望將它們分開。有一天,您需要將外部世界的數據引入 R,并將 R 中的數值結果和數字發送回外部世界。

為了處理這些現實生活中的情況,您需要做出兩個決定:

  1. 真實來源是什么?您將保存什么作為所發生事件的永久記錄?

  2. 您的分析在哪里?

6.2.1 真實的來源是什么?

作為初學者,可以依賴當前的環境來包含您在分析過程中創建的所有對象。但是,為了更輕松地處理大型項目或與其他人協作,您的真實來源應該是 R scripts。使用 R scripts(和數據文件),您可以重新創建環境。僅在您的環境中,重新創建 R scripts 要困難得多:您要么必須從內存中重新輸入大量代碼(一路上不可避免地會犯錯誤),要么必須仔細挖掘您的 R history。

為了幫助將 R scripts 保留為分析的真實來源,我們強烈建議您指示 RStudio 不要在會話之間保留工作區。您可以通過運行 usethis::use_blank_slate()Figure 6.2 中所示的選項來完成此操作。這會給您帶來一些短期的痛苦,因為現在當您重新啟動 RStudio 時,它將不再記住您上次運行的代碼,也不會再使用您創建的對象或讀取的數據集。但這種短期的痛苦可以避免長期的痛苦,因為它迫使您捕獲代碼中的所有重要過程。沒有什么比三個月后發現您只將重要計算的結果存儲在環境中,而不是計算本身存儲在代碼中更糟糕的了。

?

Figure 6.2: 將這些選項復制到你的 RStudio 選項中,以便始終從頭開始啟動 RStudio 會話。

有一對很棒的鍵盤快捷鍵可以協同工作,以確保您在編輯器中捕獲了代碼的重要部分:

  1. 按 Cmd/Ctrl + Shift + 0/F10 重新啟動 R。

  2. 按 Cmd/Ctrl + Shift + S 重新運行當前腳本。

我們每周都會使用這種模式數百次。

或者,如果您不使用鍵盤快捷鍵,則可以轉到 Session > Restart R,然后突出顯示并重新運行當前腳本。

RStudio server

如果您使用 RStudio server,默認情況下您的 R 會話永遠不會重新啟動。當您關閉 RStudio server 選項卡時,可能感覺您正在關閉 R,但服務器實際上讓它在后臺運行。下次您返回時,您將位于與離開時完全相同的位置。這使得定期重新啟動 R 變得更加重要,這樣您才能從頭開始。

6.2.2 您的分析位置在哪里?

R 有一個強大的工作目錄(working directory)概念。這是 R 查找您要求其加載的文件的位置,也是放置您要求其保存的任何文件的位置。RStudio 在控制臺頂部顯示您當前的工作目錄:

?

您可以通過運行 getwd() 在 R 代碼中打印出來:

getwd()
#>?[1]?"/Users/hadley/Documents/r4ds"

在此 R 會話中,當前工作目錄(將其視為"home")位于 hadley 的 Documents 文件夾中名為 r4ds 的子文件夾中。當您運行此代碼時,它會返回不同的結果,因為您的計算機的目錄結構與 Hadley 的不同!

作為 R 初學者,可以將工作目錄設置為主目錄、文檔目錄或計算機上任何其他奇怪的目錄。但你已經讀了這本書的七章,并且你不再是初學者了。很快您就應該將項目組織到目錄中,并且在處理項目時將 R 的工作目錄設置為關聯的目錄。

您可以在 R 中設置工作目錄,但我們不推薦這樣做:

setwd("/path/to/my/CoolProject")

有一個更好的方法;這種方式還可以讓您像專家一樣管理您的 R 工作。就是 RStudio project

6.2.3 RStudio projects

將與給定項目關聯的所有文件(input data, R scripts, analytical results, and figures)保存在一個目錄中是一種明智且常見的做法,RStudio 通過項目(projects)對此提供了內置支持。讓我們創建一個 project 供您在學習本書其余部分時使用。單擊 File > New Project,然后按照 Figure 6.3 中所示的步驟操作。

?

Figure 6.3: 要創建 new project:(top)首先單擊 New Directory,然后(middle)單擊 Create Project,然后(bottom)填寫目錄(project)名稱,選擇一個好的子目錄作為其主目錄,然后單擊 Create Project。

將您的項目命名為 r4ds,并仔細考慮將項目放在哪個子目錄中。如果您不將其存儲在合理的地方,將來將很難找到它!

此過程完成后,您將獲得一個專門用于本書的新 RStudio 項目。檢查項目的 "home" 是否是當前工作目錄:

getwd()
#>?[1]?/Users/hadley/Documents/r4ds

現在在腳本編輯器中輸入以下命令,然后保存文件,將其命名為 "diamonds.R"。然后,創建一個名為 "data" 的新文件夾。您可以通過單擊 RStudio Files 窗格中的 "New Folder" 按鈕來完成此操作。最后,運行完整的腳本,將 PNG 和 CSV 文件保存到您的項目目錄中。不用擔心細節,你會在本書后面學到它們。

library(tidyverse)ggplot(diamonds,?aes(x?=?carat,?y?=?price))?+?geom_hex()
ggsave("diamonds.png")write_csv(diamonds,?"data/diamonds.csv")

退出 RStudio。檢查與您的項目關聯的文件夾 --- 注意 .Rproj 文件。雙擊該文件以重新打開該項目。請注意,您回到了上次離開的位置:它是相同的工作目錄和命令歷史記錄,并且您正在處理的所有文件仍然打開。然而,由于您遵循了我們上面的說明,因此您將擁有一個全新的環境,保證您從頭開始。

以您最喜歡的特定于操作系統的方式,在計算機中搜索 diamonds.png,您會找到 PNG(毫不奇怪),而且還會找到創建它的腳本(diamonds.R)。這是一個巨大的勝利!有一天,您會想要重新制作一個人物,或者只是想了解它的來源。如果您使用 R 代碼嚴格地將圖形保存到文件中,而不是使用鼠標或剪貼板,那么您將能夠輕松地重現舊作品!

6.2.4 相對和絕對路徑

一旦進入項目,您應該只使用相對路徑而不是絕對路徑。有什么不同?相對路徑是相對于工作目錄的,即項目的主目錄。當 Hadley 在上面寫入 data/diamonds.csv 時,它是 /Users/hadley/Documents/r4ds/data/diamonds.csv 的快捷方式。但重要的是,如果 Mine 在她的計算機上運行此代碼,它將指向 /Users/Mine/Documents/r4ds/data/diamonds.csv。這就是為什么相對路徑很重要:無論 R 項目文件夾位于何處,它們都會起作用。

無論您的工作目錄如何,絕對路徑都指向同一位置。根據您的操作系統,它們看起來略有不同。在 Windows 上,它們以驅動器號(例如 C:)或兩個反斜杠(例如 \\servername)開頭,在 Mac/Linux 上,它們以斜杠"/"開頭(例如 /users/hadley)。您永遠不應該在腳本中使用絕對路徑,因為它們會妨礙共享:其他人不會擁有與您完全相同的目錄配置。

操作系統之間還有另一個重要的區別:如何分離路徑的組成部分。Mac 和 Linux 使用斜杠(例如 data/diamonds.csv),Windows 使用反斜杠(例如 data\diamonds.csv)。R 可以使用任何一種類型(無論您當前使用什么平臺),但不幸的是,反斜杠對 R 來說意味著一些特殊的東西,并且要在路徑中獲得單個反斜杠,您需要鍵入兩個反斜杠!這讓生活變得令人沮喪,因此我們建議始終使用帶有正斜杠的 Linux/Mac 風格。

6.3 練習

  1. 轉到 RStudio Tips Twitter account,https://twitter.com/rstudiotips 并找到一個看起來有趣的提示。練習使用它!

  2. RStudio 診斷還會報告哪些其他常見錯誤?閱讀 https://support.posit.co/hc/en-us/articles/205753617-Code-Diagnostics 找出。

6.4 總結

在本章中,您學習了如何在 scripts (files) 和 projects (directories) 中組織 R 代碼。 就像代碼風格一樣,一開始這可能感覺像是在忙活。但是,當您在多個項目中積累更多代碼時,您將學會欣賞一點預先的組織如何可以為您節省大量時間。

總之,scripts 和 projects 為您提供了可靠的工作流程,將在未來為您提供良好的服務:

  • 為每個數據分析項目創建一個 RStudio project。

  • 將腳本(具有信息豐富的名稱)保存在項目中,對其進行編輯,部分或整體運行它們。經常重新啟動 R 以確保您已捕獲腳本中的所有內容。

  • 只使用相對路徑,而不是絕對路徑。

然后,您需要的所有內容都集中在一處,并與您正在處理的所有其他項目完全分開。

到目前為止,我們已經使用了 R 包中捆綁的數據集。這樣可以更輕松地對預先準備的數據進行一些練習,但顯然您的數據無法以這種方式獲得。因此,在下一章中,您將學習如何使用 readr 包將數據從磁盤加載到 R 會話中。

?

--------------- 本章結束 ---------------

?

本期翻譯貢獻:

  • @TigerZ生信寶庫

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97470.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97470.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97470.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GitHub Spark深度體驗:是革命前夜,還是又一個“大廠玩具”?

最近&#xff0c;AI 編碼工具層出不窮&#xff0c;幾乎每天都有新概念誕生。而當 GitHub 這樣的行業巨頭攜“Vibe Coding”概念入場時&#xff0c;所有開發者的期待值都被瞬間拉滿。GitHub Spark&#xff0c;一個承諾能用自然語言將你的想法直接變成全棧應用的工具&#xff0c;…

科學研究系統性思維的方法體系:研究設計相關模版

一、研究設計方案模板 模板說明本模板基于《研究設計原理與方法》深度解讀報告的理論框架&#xff0c;幫助研究者制定系統性的研究設計方案。模板整合了因果推斷理論、效度控制框架和現代實驗設計原理。1. 研究問題界定與假設陳述 1.1 研究問題核心要素 研究問題&#xff08;明…

法律審查prompt收集

當前DeepSeek等大模型已經具備初步合同審查能力。 這里收集合同審查及相關prompt&#xff0c;不管是做Coze等Agent&#xff0c;還是開發LLM應用&#xff0c;都有可能用到這些prompt。 https://github.com/LeeXYZABC/law_propmpts.git 1 條款分析 system_prompt&#xff0c;L…

貪心算法解決活動選擇問題:最多不重疊活動數量求解

題目描述問題背景活動選擇問題是貪心算法的經典應用場景之一。假設有若干個活動&#xff0c;每個活動都有獨立的開始時間和結束時間&#xff0c;且同一時間只能進行一個活動。要求從這些活動中選擇出最大數量的不重疊活動&#xff0c;即任意兩個選中的活動&#xff0c;前一個活…

2025年如何批量下載雪球帖子和文章導出pdf?

之前分享過雪球文章下載 2025 批量下載市場高標解讀/配置喵/wangdizhe 雪球帖子/文章導出excel和pdf 這里以市場高標解讀這個號為例 抓取下載的所有帖子excel數據包含文章日期&#xff0c;文章標題&#xff0c;文章鏈接&#xff0c;文章簡介&#xff0c;點贊數&#xff0c;轉…

【C++】紅黑樹(詳解)

文章目錄上文鏈接一、什么是紅黑樹二、紅黑樹的性質1. 顏色規則2. 紅黑樹的規則為什么可以控制平衡3. 紅黑樹的效率三、紅黑樹的整體結構四、紅黑樹的插入1. 空樹的插入2. 插入節點的父親為黑色3. 插入節點的父親為紅色(1) 叔叔為紅色&#xff1a;變色(2) 叔叔為空或為黑色&…

AI提升SEO關鍵詞效果新策略

內容概要 在2025年&#xff0c;人工智能&#xff08;AI&#xff09;技術正全面革新搜索引擎優化&#xff08;SEO&#xff09;的關鍵詞優化模式。通過智能分析用戶搜索意圖與語義關聯&#xff0c;AI能夠精準匹配關鍵詞并進行高效布局。本文將深入探討AI驅動的關鍵詞策略升級方案…

手動安裝的node到nvm吧版本管理的過程。

前言 本文記錄個人在使用nvm包管理器安裝node 14版本 npm安裝失敗&#xff0c;進行手動安裝的node到nvm吧版本管理的過程。 安裝node 14 時 npm總是安裝失敗&#xff0c;如下圖 通過手動下載對于版本 node下載地址 下載解壓點擊所需的版本下載后解壓 修改解壓后的文件夾名稱…

Python爬蟲實戰:構建Widgets 小組件數據采集和分析系統

1. 引言 1.1 研究背景 在當今數字化時代,Widgets 作為用戶界面的基本組成元素,廣泛應用于移動應用、網站和桌面軟件中,其設計質量直接影響用戶體驗。隨著市場競爭的加劇,了解市場上各類 Widgets 產品的特征、價格區間、用戶評價等信息,對于產品設計和商業決策具有重要價…

1.1 Internet簡介

1.網絡, 計算機網絡, 互聯網 2.不同的角度認識Internet1.網絡, 計算機網絡, 互聯網 網絡表示連接兩點以上的通路系統比如:a.你家到鄰居家的小路 -> 一個小網絡b.一個村子的所有道路 -> 一個更大的網絡c.送外賣的小哥騎車走的路線 -> 一個配送網絡計算機網絡表示專門傳…

pytest使用allure測試報告

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 選用的項目為Selenium自動化測試Pytest框架實戰&#xff0c;在這個項目的基礎上說allure報告。 allure安裝 首先安裝python的allure-pytest包 pip install allu…

PortSwigger靶場之SQL injection with filter bypass via XML encoding通關秘籍

一、題目分析該實驗室的庫存查詢功能存在 SQL 注入漏洞。查詢結果為這些信息會出現在應用程序的響應中&#xff0c;因此您可以利用“聯合”攻擊來從其他表中獲取數據。該數據庫中有一個“用戶”表&#xff0c;該表包含了已注冊用戶的用戶名和密碼。要解決&#xff0c;需進行一次…

Cocos游戲中自定義按鈕組件(BtnEventComponent)的詳細分析與實現

概述在Cocos游戲開發中&#xff0c;按鈕交互是用戶界面中最基礎且重要的組成部分。原生的Cocos Button組件雖然功能完善&#xff0c;但在復雜的游戲場景中往往無法滿足多樣化的交互需求。本文將詳細分析一個功能強大的按鈕組件BtnEventComponent&#xff0c;它提供了多種交互模…

終于完成William F. Egan所著的Practical RF System Design的中文版學習資料

終于完成William F. Egan所著的Practical RF System Design的中文版學習資料 該文檔聚焦RF系統的分析與設計。書中先介紹系統設計流程、書籍結構及工具&#xff08;如電子表格、測試與仿真&#xff09;&#xff0c;接著圍繞RF系統關鍵參數展開&#xff1a;講解增益計算&#xf…

嵌入式Linux驅動開發:蜂鳴器驅動

嵌入式Linux驅動開發&#xff1a;蜂鳴器驅動 1. 引言 本文檔詳細記錄了基于i.MX6ULL處理器的蜂鳴器驅動開發過程。內容涵蓋驅動的理論基礎、代碼實現、設備樹配置以及用戶空間應用程序的編寫。本文檔嚴格遵循用戶提供的代碼和文檔&#xff0c;確保理論與實踐的緊密結合。本文檔…

Qt中的鎖和條件變量和信號量

Qt中的鎖和條件變量和信號量 C11中引入智能指針用來解決鎖忘記釋放的問題 代碼如下&#xff1a; void Thread::run() {for(int i0;i<50000;i){QMutexLocker locker(&mutex);//mutex.lock();num;//mutex.unlock();} }大括號結束的時候&#xff0c;生命周期踩結束&#xf…

智能電視MaxHub恢復系統

公司的MaxHub智能電視又出故障了。 去年硬件故障返廠&#xff0c;花了8600多元。 這次看上去是軟件故障。開機后藍屏報錯。 按回車鍵&#xff0c;電視重啟。 反復折騰幾次&#xff0c;自行修復執行完畢&#xff0c;終于可以進入系統了。 只不過進入windows10后&#xff0c;圖…

TensorFlow 面試題及詳細答案 120道(71-80)-- 性能優化與調試

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。 前后端面試題-專欄總目錄 文章目錄 一、本文面試題目錄 71. 如何優化TensorFlow模…

數據結構 第三輪

以看嚴蔚敏老師的教材為主&#xff0c;輔以其他輔導書&#xff1a;王道&#xff0c;新編數據結構&#xff0c;學校講義 線性結構&#xff1a;線性表、串、隊列、棧、數組和廣義表 樹形結構、網狀結構&#xff1a;圖 查找、排序 動態內存管理和文件 緒論 8-29 數據&#xf…

[新啟航]新啟航激光頻率梳 “光量子透視”:2μm 精度破除遮擋,完成 130mm 深孔 3D 建模

摘要&#xff1a;本文介紹新啟航激光頻率梳的 “光量子透視” 技術&#xff0c;該技術憑借獨特的光量子特性與測量原理&#xff0c;以 2μm 精度破除深孔遮擋&#xff0c;成功完成 130mm 深孔的 3D 建模&#xff0c;為深孔三維形態的精確獲取提供了創新解決方案&#xff0c;推動…