自學R語言 ,有什麼注意的細節或好的習慣?
R自學,希望各位提出意見與知道。
- 對演算法性能有很高要求的代碼最好採用C++編寫,用Rcpp調用
- 需要充分利用向量化、矩陣化計算,盡量使用apply家族函數,盡量避免循環for等等
- 對於R對象的合理使用,不要去不斷地對list或data frame等對象改變結構,最好一開始就初始化好一個結構不會改變的對象,然後去修改。
- 盡量用擴展包中提供的現成函數去做數據變換,因為都是經過大量優化的,比如dplyr等等。
- 在較為複雜的項目上盡量將輸入、數據、邏輯分離,輸入即系統的運行參數,可以用json或者yaml來保存,數據可以放在資料庫中用數據介麵包調用,邏輯即R代碼。具體可參見我的博文:Kun Ren - A principle of writing robust R program
- 盡量避免用.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篇:「來啊,造作吧,反正有大把的內存」
※宏名不能隨便起