《R for Data Science (2e)》免費中文翻譯 (第2章) --- Workflow: basics

寫在前面

本系列推文為《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/


目錄

  • 2.1 編程基礎

  • 2.2 注釋

  • 2.3 名稱叫什么?

  • 2.4 調用函數

  • 2.5 練習

  • 2.6 總結

你現在已經有一些運行 R 代碼的經驗了。雖然我們沒有給你太多細節,但顯然你已經掌握了基礎知識,否則你就會因為沮喪而放棄這本書了!當你開始使用 R 編程時,沮喪是很自然的,因為它對標點符號非常嚴格,即使一個字符放錯位置也會引起錯誤。但是盡管你可能會感到一些挫敗,要安慰自己的是,這種經歷是典型的和暫時的:每個人都會經歷這個階段,克服它的唯一辦法就是不斷嘗試。

在我們繼續之前,讓我們確保你在運行 R 代碼方面有堅實的基礎,并且了解一些最有幫助的 RStudio 功能。

2.1 編程基礎

讓我們回顧一些基礎知識,為了盡快讓您開始繪圖,我們在之前省略了一些內容。您可以使用 R 進行基本的數學計算:

1?/?200?*?30
#>?[1]?0.15
(59?+?73?+?2)?/?3
#>?[1]?44.66667
sin(pi?/?2)
#>?[1]?1

您可以使用賦值運算符 <- 創建新的對象:

x?<-?3?*?4

請注意,變量 x 的值不會被打印出來,它只是被存儲起來了。如果您想查看該值,請在控制臺中輸入 x

您可以使用 c() 將多個元素組合(combine)成一個向量:

primes?<-?c(2,?3,?5,?7,?11,?13)

對向量進行基本的算術運算會應用到向量的每個元素:

primes?*?2
#>?[1]??4??6?10?14?22?26
primes?-?1
#>?[1]??1??2??4??6?10?12

所有在 R 中創建對象的語句,也就是賦值(assignment)語句,都具有相同的形式:

object_name?<-?value

在閱讀這段代碼時,在腦海中可以說 “object name gets value”。

您將會進行很多賦值操作,而 <- 的輸入可能會很麻煩。您可以使用 RStudio 的快捷鍵來節省時間:Alt + - (減號)。請注意,RStudio 會自動在 <- 周圍添加空格,這是一個很好的代碼格式化習慣。代碼有時可能很難閱讀,因此請給你的眼睛一些休息,并使用空格來提高可讀性。

2.2 注釋

R 會忽略 # 后面的任何文本。這允許您編寫注釋(comments),即 R 忽略但供其他人閱讀的文本。我們有時會在示例中包含注釋,以解釋代碼的運行過程。

注釋可以用于簡要描述以下代碼的作用。

#?create?vector?of?primes
primes?<-?c(2,?3,?5,?7,?11,?13)#?multiply?primes?by?2
primes?*?2
#>?[1]??4??6?10?14?22?26

像這樣的短小代碼片段,可能不需要為每一行代碼都留下注釋。但是當你編寫的代碼變得更加復雜時,注釋可以節省你(和你的合作者)很多時間,幫助你理解代碼的操作。

使用注釋來解釋代碼的 why,而不是 how 或 what。代碼的 what 和 how 總是可以通過仔細閱讀來弄清楚,即使可能會有些繁瑣。如果你在注釋中描述了每個步驟,然后更改了代碼,你就必須記住同時更新注釋,否則當你將來返回到代碼時會感到困惑。

弄清楚 why 某些事情被做是更加困難的,甚至是不可能的。例如,geom_smooth() 函數有一個名為 span 的參數,用于控制曲線的平滑程度,較大的值會產生更平滑的曲線。假設你決定將 span 的值從默認的 0.75 更改為 0.9:未來的讀者很容易理解正在發生的是 what,但除非你在注釋中記錄你的思考過程,否則沒有人會明白你 why 改變了默認值。

對于數據分析代碼,使用注釋來解釋你的整體攻擊計劃,并在遇到重要發現時記錄下來。從代碼本身無法重新獲取這些知識。

2.3 名稱叫什么?

對象名稱必須以字母開頭,只能包含字母、數字、_.。你希望你的對象名稱具有描述性,因此你需要采用一種適用于多個單詞的約定。我們推薦使用蛇形命名法(snake_case),其中你用下劃線(_)分隔小寫單詞。

i_use_snake_case
otherPeopleUseCamelCase
some.people.use.periods
And_aFew.People_RENOUNCEconvention

當我們在 Chapter 4 中討論代碼風格時,我們將再次回到命名問題。

你可以通過輸入對象的名稱來檢查它:

x
#>?[1]?12

提供另一個賦值:

this_is_a_really_long_name?<-?2.5

要檢查這個對象,可以嘗試使用 RStudio 的自動補全功能:輸入 "this",按下 TAB 鍵,在唯一前綴之前添加字符,然后按回車鍵。

假設你犯了一個錯誤,this_is_a_really_long_name 的值應該是 3.5,而不是 2.5。你可以使用另一個鍵盤快捷鍵來幫助你進行修正。例如,你可以按 ↑ 鍵來調出你最后輸入的命令并進行編輯。或者,輸入 “this”,然后按下 Cmd/Ctrl + ↑ 鍵,以列出以這些字母開頭的所有命令。使用箭頭鍵導航,然后按回車鍵重新輸入命令。將 2.5 更改為 3.5 并重新運行。

提供另一個賦值:

r_rocks?<-?2^3

讓我們嘗試檢查它:

r_rock
#>?Error:?object?'r_rock'?not?found
R_rocks
#>?Error:?object?'R_rocks'?not?found

這說明了你和 R 之間的默契協議:R 會為你完成繁瑣的計算,但作為交換,你必須在指令上完全準確。如果不準確,你可能會收到一個錯誤,提示找不到你要查找的對象。拼寫錯誤是有影響的;R 無法讀懂你的心思,說:“哦,他們在輸入 r_rock 時可能是想表達 r_rocks。” 大小寫也很重要;同樣,R 無法讀懂你的心思,說:“哦,他們在輸入 R_rocks 時可能是想表達 r_rocks。”

2.4 調用函數

R 有一個龐大的內置函數集合,調用方式如下所示:

function_name(argument1?=?value1,?argument2?=?value2,?...)

讓我們嘗試使用 seq() 函數,它可以創建序列(sequences)的數字。同時,我們也可以了解一些 RStudio 的其他有用功能。輸入 se,然后按下 TAB 鍵。一個彈出窗口將顯示可能的自動補全選項。通過輸入更多字符(例如,q)來指定 seq(),以消除歧義,或者使用 ↑/↓ 箭頭選擇。注意彈出的浮動工具提示,提醒你函數的參數和用途。如果需要更多幫助,按下 F1 鍵可以在右下方的幫助選項卡中獲取所有細節。

當你選擇了你想要的函數后,再次按下 TAB 鍵。RStudio 將會為你添加匹配的左括號(()和右括號())。 輸入第一個參數的名稱 from,并將其設置為 1。然后,輸入第二個參數的名稱 to,并將其設置為 10。最后,按下回車鍵。

seq(from?=?1,?to?=?10)
#>??[1]??1??2??3??4??5??6??7??8??9?10

在函數調用中,我們經常省略前幾個參數的名稱,因此我們可以將其重寫如下:

seq(1,?10)
#>??[1]??1??2??3??4??5??6??7??8??9?10

輸入以下代碼,并注意 RStudio 提供了類似的幫助來配對引號:

x?<-?"hello?world"

引號和括號必須總是成對出現。RStudio 盡力幫助你,但仍然有可能出錯,導致不匹配。如果出現這種情況,R 會顯示續行字符 “+”:

>?x?<-?"hello
+

+ 符號告訴你 R 正在等待更多的輸入;它認為你還沒有完成。通常,這意味著你可能忘記了一個 " 或者一個 )。要么添加缺失的配對,要么按下 ESCAPE 鍵中斷表達式,然后重試。

請注意,右上方的環境選項卡(Environment tab)顯示了你創建的所有對象:

?

2.5 練習

  1. 為什么這段代碼不工作?

my_variable?<-?10
my_var?able
#>?Error:?object?'my_var?able'?not?found

仔細看!(這可能看起來毫無意義,但當你編程時,訓練你的大腦注意到即使是微小的差異也會有所回報。)

  1. 調整以下每個 R 命令,使其能夠正確運行:

libary(todyverse)ggplot(dTA?=?mpg)?+?geom_point(maping?=?aes(x?=?displ?y?=?hwy))?+geom_smooth(method?=?"lm)
  1. 按下 Option + Shift + K / Alt + Shift + K。會發生什么? 如何通過菜單到達相同的位置?

  2. 讓我們重新審視 Section 1.6 中的一個練習。運行以下代碼行。兩個圖中的哪一個會保存為 mpg-plot.png?為什么?

my_bar_plot?<-?ggplot(mpg,?aes(x?=?class))?+geom_bar()
my_scatter_plot?<-?ggplot(mpg,?aes(x?=?cty,?y?=?hwy))?+geom_point()
ggsave(filename?=?"mpg-plot.png",?plot?=?my_bar_plot)

2.6 總結

現在你對 R 代碼的工作原理有了更多了解,還學到了一些提示,可以幫助你在將來回顧代碼時更好地理解它。

在下一章中,我們將繼續你的數據科學之旅,教你如何使用 dplyr 這個 tidyverse 包來轉換數據,無論是選擇重要變量、篩選感興趣的行,還是計算摘要統計信息。

?

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

?

本期翻譯貢獻:

  • @TigerZ生信寶庫

?

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

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

相關文章

開源深度學習新寵:Burn框架助您無憂高效建模

在日新月異的人工智能世界里&#xff0c;各類深度學習框架如雨后春筍般涌現&#xff0c;而Burn&#xff0c;作為新一代的深度學習框架&#xff0c;以其不妥協的靈活性、高效性和可移植性嶄露頭角。本文將深入探討Burn的核心功能、應用場景及具體使用方法&#xff0c;幫助您更好…

基于深度學習的圖像分割:使用DeepLabv3實現高效分割

前言 圖像分割是計算機視覺領域中的一個重要任務&#xff0c;其目標是將圖像中的每個像素分配到不同的類別中。近年來&#xff0c;深度學習技術&#xff0c;尤其是卷積神經網絡&#xff08;CNN&#xff09;&#xff0c;在圖像分割任務中取得了顯著的進展。DeepLabv3是一種高效的…

如何高效合并音視頻文件(時間短消耗資源少)(二)

英語字幕 1 00:00:06,480 --> 00:00:08,400 Good morning. We have a banger for you2 00:00:08,400 --> 00:00:09,840 today. We&amp;#39;re going to launch chatbt3 00:00:09,840 --> 00:00:11,519 agent. But before jumping into that, I&amp;#39;d4 00…

內網后滲透攻擊過程(實驗環境)--4、權限維持(2)

用途限制聲明&#xff0c;本文僅用于網絡安全技術研究、教育與知識分享。文中涉及的滲透測試方法與工具&#xff0c;嚴禁用于未經授權的網絡攻擊、數據竊取或任何違法活動。任何因不當使用本文內容導致的法律后果&#xff0c;作者及發布平臺不承擔任何責任。滲透測試涉及復雜技…

CentOS 9 配置國內 YUM 源

1.備份 sudo mv /etc/yum.repos.d/centos.repo /etc/yum.repos.d/centos.repo.backup sudo mv /etc/yum.repos.d/centos-addons.repo /etc/yum.repos.d/centos-addons.repo.backup2.創建新文件 vi /etc/yum.repos.d/centos.repo[baseos] nameCentOS Stream $releasever - BaseO…

【算法】遞歸、搜索與回溯算法入門

文章目錄遞歸什么是遞歸為什么會用到遞歸如何理解遞歸如何寫好一個遞歸搜索 vs 深度優先遍歷 vs 深度優先搜索 vs 寬度&#xff08;廣度&#xff09;優先遍歷 vs 寬度&#xff08;廣度&#xff09;優先搜索 vs 暴搜深度優先遍歷 vs 深度優先搜索&#xff08;dfs&#xff09;寬度…

借助Aspose.HTML控件,在 Python 中將 SVG 轉換為 PDF

您可能會發現許多解決方案都提供以編程方式將SVG轉換為PDF 的功能。但這篇博文將介紹一個功能強大的 SDK&#xff0c;供 Python 開發人員自動化文件轉換和操作。本指南將重點介紹通過 .NET 實現 Python 的 Aspose.HTML。此外&#xff0c;我們將逐步講解相關步驟和代碼片段&…

高級06-Java網絡編程:從Socket到HTTP

引言&#xff1a;Java 網絡編程的重要性 隨著互聯網技術的飛速發展&#xff0c;網絡編程已成為現代軟件開發中不可或缺的一部分。Java 作為一種廣泛應用于企業級開發和分布式系統的編程語言&#xff0c;提供了強大的網絡通信支持。從底層的 Socket 編程到高層的 HTTP 協議處理&…

STM32的藍牙通訊(HAL庫)

藍牙基礎知識&#xff08;了解即可&#xff09;&#xff1a;1.是一種利用低功率無線電&#xff0c;支持設備短距離通信的無線電技術&#xff0c;能在包括移動電話、PDAQ、無線耳機、筆記本電腦、相關外設等眾多設備之間進行無線信息交換&#xff0c;藍牙工作在全球通用的2.4 GH…

方案B,version1

我們重新設計起步階段的步驟,目標是:通過運行PowerShell腳本和配置GitHub Actions工作流(deploy.yml)來實現自動化部署。 要求: 用私有倉庫(my-website-source-SSH)存儲源碼。 通過GitHub Actions自動構建(這里只是簡單的Hello World,所以構建步驟可以簡化為復制文件…

Linux --- 進程

一、進程概念 在 Linux 系統中&#xff0c;??進程&#xff08;Process&#xff09;?? 是程序執行的動態實例&#xff0c;是操作系統進行資源分配和調度的基本單位。 ??1. 程序 vs 進程?? ??程序&#xff08;Program&#xff09;??&#xff1a;是靜態的代碼集合&…

Cgroup 控制組學習(三)在容器中使用 CGroups

一、CGroups 關于mememory的限制操作 cgroup關于cpu操作 關于memeory cgroup的幾個要點 ① memeory限額類 1、memory.limit_bytes&#xff1a;硬限制--> 限制最大內存使用量&#xff0c;單位有k、m、g三種&#xff0c;填-1則代表無限制,默認是字節2、memory.soft_limi…

SpringBoot面試基礎知識

SpringBoot 是面試中后端開發崗位的高頻考點&#xff0c;以下是核心考點整理&#xff1a;1. SpringBoot 基礎概念- 定義&#xff1a;SpringBoot 是 Spring 框架的簡化版&#xff0c;通過“自動配置”“起步依賴”等特性&#xff0c;簡化 Spring 應用的搭建和開發&#xff0c;減…

Java面試全方位解析:從基礎到AI的技術交鋒

Java面試全方位解析&#xff1a;從基礎到AI的技術交鋒 面試場景&#xff1a;互聯網大廠Java工程師崗位面試 面試官&#xff1a;您好&#xff0c;我是今天的面試官&#xff0c;接下來我們將進行三輪技術面試。 謝飛機&#xff1a;您好您好&#xff01;我是謝飛機&#xff0c;特別…

Web Worker:解鎖瀏覽器多線程,提升前端性能與體驗

目錄 一、Web Worker 是什么&#xff1f; 核心特性 類型 二、為什么需要 Web Worker&#xff1f;(單線程的痛點) 三、Web Worker 的典型使用場景 四、一個簡單的代碼示例 (專用 Worker) 五、使用 Web Worker 的注意事項 六、總結 一、Web Worker 是什么&#xff1f; 簡…

LabVIEW命令行調用與傳參功能

該功能一方面借助 Formatinto String 構建命令行字符串&#xff0c;實現LabVIEW 環境下命令行調用 VI 并傳參&#xff1b;另一方面&#xff0c;針對 Mac 平臺&#xff0c;通過解析應用 Info.plist 文件&#xff0c;處理 LabVIEW 可執行文件路徑&#xff0c;完善跨平臺命令行調用…

使用FRP搭建內網穿透工具,自己公網服務器獨享內外網端口轉發

內網穿透&#xff0c;也即 NAT 穿透&#xff0c;進行 NAT 穿透是為了使具有某一個特定源 IP 地址和源端口號的數據包不被 NAT 設備屏蔽而正確路由到內網主機。簡單來說&#xff0c;就是讓互聯網&#xff08;外網&#xff09;設備能訪問局域網&#xff08;內網&#xff09;設備提…

JavaWeb01——基礎標簽及樣式(黑馬視頻筆記)

1.如何用VScode寫html代碼 1. 首先在vscode上安裝一些插件&#xff0c;插件如下&#xff1a; 2.打開你要寫入的html文件的文件夾&#xff0c;然后右擊“ 新建文件”&#xff0c;命名 “xxx.html”, 3.如果是寫 css文件&#xff0c;那么也是右擊“新建文件”&#xff0c;命名“x…

在2G大小的文件中,找出高頻top100的單詞

將 2GB 的大文件分割為 2048 個大小為 512KB 的小文件&#xff0c;采用流式讀取方式處理&#xff0c;避免一次性加載整個文件導致內存溢出。初始化一個長度為 2048 的哈希表數組&#xff0c;用于分別統計各個小文件中單詞的出現頻率。利用多線程并行處理機制遍歷所有 2048 個小…

基于LNMP分布式個人云存儲

1.準備工作a.關閉兩臺虛擬機的安全軟件客戶端&#xff1a;[rootmaster ~]# systemctl stop firewalld [rootmaster ~]# systemctl disable firewalld [rootmaster ~]# systemctl status firewalld ○ firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (…