書名: R語言經典實例(原書第2版)作者名: (美)J.D.隆 保羅·蒂特本章字數: 1877字更新時間: 2020-08-03 16:43:27
1.14 向Stack Overflow或社區的其他網站提交問題
1.14.1 問題
向R社區提交一個無法在線找到答案的問題。
1.14.2 解決方案
在線提問的第一步是創建一個可重現的例子。擁有可以運行并查看確切問題的示例代碼是在線尋求幫助的最關鍵部分。具有良好可重現示例的問題由三個部分組成:
示例數據
這可以是模擬數據或是你提供的一些實際數據。
示例代碼
此代碼顯示你嘗試過的內容或你收到的錯誤。
書面說明
在這里,你可以解釋提交內容、希望獲得的內容以及嘗試過的不起作用的內容。
討論部分中介紹編寫可重現示例的詳細信息。一旦有了可重現的示例,就可以在Stack Overflow上發布你的問題(https://stackoverflow.com/questions/ask)。請務必在問詢頁面的“Tags”中包含r標簽。
如果你的問題更為通用或與概念相關而不是關于特定語法的,則可以訪問RStudio維護的RStudio社區論壇(RStudio Community discussion forum)(https://community.rstudio.com/)。請注意,該網站分為多個主題,因此請選擇最適合你的問題的主題類別。
或者你可以將問題提交給R郵件列表(但不要提交到多個站點,如郵件列表和Stack Overflow,因為這被認為是粗魯的多方提交)。
郵件列表頁面(http://www.r-project.org/mail.html)包含使用R-help郵件列表的一般信息和說明。一般過程如下:
1.訂閱R主要郵件列表,R-help(http://bit.ly/2Xd4wB2)。
2.仔細、正確地寫下你的問題,并包含可重現示例。
3.將問題發送至r-help@r-project.org。
1.14.3 討論
R-help郵件列表、Stack Overflow和RStudio社區網站都是很好的資源,但請將它們視為最后的手段。閱讀幫助頁面、閱讀文檔、搜索幫助列表存檔以及搜索Web,你的問題很可能在那里已經得到了回答,很少有問題是獨一無二的。但是,如果你已經用盡所有其他選擇,也許是時候創建一個好問題了。
可重現示例是一個好的幫助請求的關鍵。第一個部分是示例數據。獲得此功能的一個好方法是使用一些R函數來模擬數據。以下示例創建一個名為example_df的數據框,該數據框有三列,每列都有不同的數據類型:
set.seed(42) n <- 4 example_df <- data.frame( some_reals = rnorm(n), some_letters = sample(LETTERS, n, replace = TRUE), some_ints = sample(1:10, n, replace = TRUE) ) example_df #> some_reals some_letters some_ints #> 1 1.371 R 10 #> 2 -0.565 S 3 #> 3 0.363 L 5 #> 4 0.633 S 10
請注意,此示例在開頭使用命令set.seed。這確保了每次運行此代碼時,答案都是相同的。n值是你要創建的示例數據的行數。盡可能簡化示例數據以說明你的問題。
創建模擬數據的另一種方法是使用R附帶的示例數據。例如,數據集mtcars包含一個數據框,其中包含有關不同汽車型號的32條記錄:
data(mtcars) head(mtcars) #> mpg cyl disp hp drat wt qsec vs am gear carb #> Mazda RX4 21.0 6 160 110 3.90 2.62 16.5 0 1 4 4 #> Mazda RX4 Wag 21.0 6 160 110 3.90 2.88 17.0 0 1 4 4 #> Datsun 710 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1 #> Hornet 4 Drive 21.4 6 258 110 3.08 3.21 19.4 1 0 3 1 #> Hornet Sportabout 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2 #> Valiant 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
如果你的示例僅可以使用你自己的數據重現,則可以使用dput將你自己的一些數據放入可在示例中使用的字符串中。我們將使用mtcars數據集中的兩行來說明該方法:
dput(head(mtcars, 2)) #> structure(list(mpg = c(21, 21), cyl = c(6, 6), disp = c(160, #> 160), hp = c(110, 110), drat = c(3.9, 3.9), wt = c(2.62, 2.875 #> ), qsec = c(16.46, 17.02), vs = c(0, 0), am = c(1, 1), gear = c(4, #> 4), carb = c(4, 4)), row.names = c("Mazda RX4", "Mazda RX4 Wag" #> ), class = "data.frame")
你可以將structure結果直接放在問題中:
example_df <- structure(list(mpg = c(21, 21), cyl = c(6, 6), disp = c(160, 160), hp = c(110, 110), drat = c(3.9, 3.9), wt = c(2.62, 2.875 ), qsec = c(16.46, 17.02), vs = c(0, 0), am = c(1, 1), gear = c(4, 4), carb = c(4, 4)), row.names = c("Mazda RX4", "Mazda RX4 Wag" ), class = "data.frame") example_df #> mpg cyl disp hp drat wt qsec vs am gear carb #> Mazda RX4 21 6 160 110 3.9 2.62 16.5 0 1 4 4 #> Mazda RX4 Wag 21 6 160 110 3.9 2.88 17.0 0 1 4 4
可重現性良好的示例的第二部分是示例代碼。示例代碼應該盡可能簡單,并說明你嘗試做的或已經嘗試過的內容。它不應該是一大堆包含許多無關內容的代碼。將你的示例簡化為必要的最少量代碼。如果你使用任何添加包,請務必在代碼的開頭包含添加包調用。此外,不要在你的問題中包含任何可能對運行代碼的人有害的內容,例如rm(list=ls()),它會刪除內存中的所有R對象。對那些試圖幫助你的人要有同理心,意識到他們自愿花時間幫助你,并且是用他們自己的工作機器來運行你的代碼。
要測試你的示例,請打開一個新的R會話并嘗試運行它。一旦編輯了代碼,就可以向可能提供反饋的讀者給出更多信息了。在純文本中,描述你嘗試做什么、嘗試過什么以及你的問題,并且盡可能簡潔。與示例代碼一樣,你的目標是盡可能有效地與閱讀問題的人進行溝通。你可能會發現,在你的描述中包含你正在運行的R版本以及所在平臺(Windows、Mac、Linux)會很有幫助。你可以使用sessionInfo命令輕松獲取該信息。
如果你要將問題提交到R郵件列表,你應該知道實際上存在幾個郵件列表。R-help是一般問題的主要列表。還有許多特殊興趣小組(Special Interest Group,SIG)郵件列表,它們專門用于特定領域,如遺傳學、金融、R開發,甚至R工作。你可以在https://stat.ethz.ch/mailman/listinfo上查看完整列表。如果你的問題專注于某個領域,則可以通過選擇相應的列表獲得更好的答案。但是,與R-help一樣,在提交問題之前,請仔細搜索SIG列表存檔。
1.14.4 另請參閱
建議你在提交任何問題之前閱讀Eric Raymond和Rick Moen的題為“如何以聰明的方式提出問題”的優秀論文(https://www.catb.org/~esr/faqs/smart-questions.html)。建議認真閱讀。
Stack Overflow有一篇很棒的文章,其中包含有關創建可重現示例的詳細信息。你可以在(https://stackoverflow.com/q/5963269/37751)找到它。
Jenny Bryan有一個很棒的R添加包叫作reprex,它有助于創建一個良好的可重現的例子,并提供輔助函數來為Stack Overflow等網站編寫markdown文本。你可以在她的GitHub頁面(https://github.com/tidyverse/reprex)上找到該包。
- Learning RxJava
- ADI DSP應用技術集錦
- Gradle for Android
- 小學生C++創意編程(視頻教學版)
- Hands-On Full Stack Development with Go
- Mastering C++ Multithreading
- SQL Server 2008中文版項目教程(第3版)
- Java并發編程:核心方法與框架
- Python 3 Object:oriented Programming(Second Edition)
- Python預測分析實戰
- Visual C++開發寶典
- Node.js 6.x Blueprints
- Java面向對象程序設計教程
- Java核心技術速學版(第3版)
- WCF編程(第2版)