自學R語言 ,有什麼注意的細節或好的習慣?

R自學,希望各位提出意見與知道。


  1. 對演算法性能有很高要求的代碼最好採用C++編寫,用Rcpp調用

  2. 需要充分利用向量化、矩陣化計算,盡量使用apply家族函數,盡量避免循環for等等

  3. 對於R對象的合理使用,不要去不斷地對list或data frame等對象改變結構,最好一開始就初始化好一個結構不會改變的對象,然後去修改。
  4. 盡量用擴展包中提供的現成函數去做數據變換,因為都是經過大量優化的,比如dplyr等等。
  5. 在較為複雜的項目上盡量將輸入、數據、邏輯分離,輸入即系統的運行參數,可以用json或者yaml來保存,數據可以放在資料庫中用數據介麵包調用,邏輯即R代碼。具體可參見我的博文:Kun Ren - A principle of writing robust R program

  6. 盡量避免用.Rprofile定義初始化運行的代碼,比如設定digits, stringsAsFactors選項等等,因為換一個環境沒有運行整個代碼可能就會出問題。

對於代碼風格的好習慣,雖然純屬個人偏好,但是還是推薦採用 https://google-styleguide.googlecode.com/svn/trunk/Rguide.xml 建議的代碼風格。


我的教訓是:沒事兒別胡亂更新……


Apply 對運行效率的增進其實很小,因為這函數其實裡面就是for.....

啊哈哈哈哈哈哈,你們都被騙了的鏈接 請教:怎樣把SAS中用array寫的data set轉換成R中的loop 語句? ? COS論壇

推薦 謝益輝 | 統計之都


同樣一個實現,優化和不優化的代碼速度上能差好多好多……

先佔坑


學習R前,最好可以系統學習一下Java或者C++。具體說是,應該學習下Data Structure和Algorithm。我本科上的UWashi?n?g?ton的CS142和143,課程語言是Java。對我日後學習R語言的幫助很大。

開始學習R的時候,應該從它最基本的object入手,比如list,array,data frame。多找一些學習資料;把這些基本的細節都掌握通透,不要一上來就要寫個大project。

然後就可以開始寫一些小的 project。一定要多想。雖然R已經是非常高級的語言了,不像C++或者java,自己要編function。R中的function很多時候都是拿來就能套用的。這就導致了很多人R用了很多年,但是完全沒長進。主要原因是只會套package。有幾點小建議,不妨嘗試下:

1. 寫任何project前,先寫psudo code。能實現一個功能的方法很多,但是哪種方法最便捷,一定要在這一步多想。即便想套package,也要想想為什麼用package A而不是B;有些function可能有些unexpected side effect,這個怎麼處理;如果寫一個project是10分鐘,9分鐘都要花在想上面。就和寫作文一樣,一定先打草稿,才能下筆如有神。

2. 熟悉一些常見的package。data table,dyplyr,plyr這些data manipulation package,還有rpart,glm這些model package,還有ggplot,plotly這些做visualization的工具。總而言之,把常用的統計方法對應的R package弄熟悉。每個package最起碼要知道這個package主要做什麼的,有什麼限制,怎麼解決。

3. R 畢竟是作為一個工具來使用的,對於絕大多數人,還是要理解統計和machine learning的方法為前提下,用R來實現一些演算法。所以,打好理論基礎。

除了這三點, Welcome · Advanced R. 這個學習資料很好,推薦下。做做Kaggle。其餘就應該都是時間夠了,就學好了。


{

code

}

{

code

}

誰用誰知道


多用。

先隨便找一個幾小時左右的視頻教程,跟一遍,做到能把R用起來。個人推薦Cousera上的一個R課程:https://www.coursera.org/learn/r-programming

然後,但凡有什麼工作都用R做。遇到問題立即百度、google「xxxx(你的問題) in R」,基本上你能遇到的問題都答案了。

進一步熟悉之後,有幾個常用的重要的package再系統地學習。

最後,還是多用!


還是上網多看一看寫好的例子吧,不論是中文還是英文的網站,都要涉及。分析比較不通用法的優缺點,爭取記下來。還有就是自己多實踐。嗯,就是這樣。


推薦閱讀:

MPS教程四:製作一個簡易語言(下)
【認真臉】TypeScript 不是強類型!只是靜態類型!
第3篇:「來啊,造作吧,反正有大把的內存」
宏名不能隨便起

TAG:編程語言 | 編程 | 編程入門 | R編程語言 | 數據處理 |