就一個R和SAS精通程度幾乎相同,在兩種環(huán)境下都做過比較大(moderately big, ~xx Gb)的數(shù)據(jù)分析,與其他語言環(huán)境嵌合(SQL, Perl, etc.。。),使用過的個人(統(tǒng)計專業(yè)人員,非編程專業(yè)人員)的感受而言如下:
R的優(yōu)點:
1. 免費。。。 開源。。。 (這是最重要的一點好不好,也是SAS流行于公司,R流行于研究機構和大學的最主要原因)
2. 是專門為統(tǒng)計和數(shù)據(jù)分析開發(fā)的語言,各種功能和函數(shù)琳瑯滿目,其中成熟穩(wěn)定的一抓一把
3. 語言簡單易學。雖與C語言之類的程序設計語言已差別很大(比如語言結構相對松散,使用變量前不需明確正式定義變量類型等等),但仍保留了程序設計語言的基礎邏輯與自然的語言風格。我這樣說可能讓人聽得云里霧里,但是如果你對SAS或者SPSS有一點點了解,就會明白我的意思了。。。
4. 小。。。 安裝程序只有50Mb左右,比起某些死貴且3個G的付費軟件真的是超級迷你小巧玲瓏。。。 因為體積輕便,運行起來系統(tǒng)負擔也小。
5. 同各種OS的兼容性好。我兩臺本本一臺Windows,一臺Linux,都用得很順手。相比之下,你有見過人在Mac上用SAS嗎。。。 這人是要多么的想不開。。。 =。 =
6. 因為用的人越來越多,又是開源,有很多配套的“插件”為其錦上添花。比如xtable里有一個函數(shù)可以直接將R里的表格導出為TeX格式;另有RStudio的插件讓你可以在同一個環(huán)境里寫TeX跑R并可在你的TeX文件中插入你的R代碼,多么的賢良淑德。。。 (這個插件我沒用過,不過我同學一天到晚在用)
7. 有R GUI和RStudio兩種風格供君選擇,說實話我覺得這兩種風格已經(jīng)涵括了大多數(shù)人的使用偏好。。。
8. 已經(jīng)提過了開源,還想再強調一下。各種包和函數(shù)的透明性極好,這使得對函數(shù)的調整和改良變得非常便利。只需要把源碼調出來,自己稍微修改一下就可以了。這種事情放在任何其他統(tǒng)計軟件里都近乎奢望。
9. 如果你做Bayesian,用R你有OpenBUGS, WinBUGS, JAGS等各種成熟活潑的包裹,很多語言又簡單又附帶各種預設的plot,你只需調用即可;還可以自己寫MCMC。如果你用SAS/SPSS/Stata,你可以。。。 @@? = =bbb
10. 漂亮又靈活的圖,大家也都已經(jīng)講過了。原本不是什么特別突出的長處(有則好,沒也沒啥),不過現(xiàn)在數(shù)據(jù)可視化越來越熱,也就一躍成為主要優(yōu)點了。
缺點:
1. 對大文本(text data)處理極差。。。 或者說data management本就不是R的強項。SAS于R的最大優(yōu)勢之一可能就在于它兼顧了數(shù)據(jù)分析和數(shù)據(jù)管理。在SAS里對數(shù)據(jù)進行各種復雜操作都相對容易,只需要簡單的DATA STEP(必要時結合PROC SQL)即可完成;在R里可就真的是千辛萬苦。。。 雖然也有相應的aggregate, merge之類的函數(shù),但是大都不太好用。這也是為什么大家常常把數(shù)據(jù)(尤其是數(shù)據(jù)大時)在別的環(huán)境下整好/分割好再喂給R。人家術業(yè)有專攻,數(shù)據(jù)管理真是有些難為它了。
2. 內存管理和平行處理(parallel processing/programming)都為人詬病。數(shù)據(jù)小時沒有感覺,數(shù)據(jù)大了就各種報錯。。。 =。 =
3. package的可靠性問題。我第一門完全使用R做作業(yè)的課是門統(tǒng)計課,教授已經(jīng)六十多歲,見過各種統(tǒng)計軟件的出生發(fā)展和湮沒。她同我們說到R時第一句話就是Never use a package before you understand the manual and confirm the validity of the functions. 也就是包裹雖然好,使用需謹慎。主要原因還是在于開源。不常用的package一定要搞清楚函數(shù)的用法和核實過輸出,不然真的不推薦使用。我個人也是傾向非常用函數(shù)盡量自己寫,至少錯了也容易debug.。。
4. 不得不提的package的版本問題。 就算你確認了包裹的可靠性并熟知了各個變量要怎么用,還是可能掉入潛在的陷阱=。 = 講個真事:去年工作的時候一個項目是使用11年某項目的一個貝葉斯模型分析新的數(shù)據(jù)。當年寫代碼的人因為相信末日說兩年前就已經(jīng)辭職環(huán)游世界去了,于是我只好獨自研讀他的代碼。第一步,很自然的,就是重復當年的分析結果。這時發(fā)現(xiàn)當年他用的一個package和現(xiàn)在的R已經(jīng)不兼容,于是就下載了這個package的最新版本。結果有一個簡單的credible interval怎么都重復不出來。。。 怎么怎么都重復不出來。。。 我都快絕望了。最后經(jīng)各種推理驗證,發(fā)現(xiàn)這個區(qū)別源自于新舊版本的函數(shù)內部在對數(shù)據(jù)排序之后對NaN的不同處理。。。 而這個小小的修改未在任何地方留下任何文字記錄。所以怎么說呢。。。 很多時候還是寫自己的程序靠譜哇。。。
5. 當你跑比較大的simulation,對效率有要求的時候,有時還是不得不用C,這可能是10小時和10分鐘的差別,毫不夸張。
評論