R的優點:免費,開源,體積小。
缺點:對大文本處理差,另外一個也在於開源,package如果出錯,煩死你。
當你跑比較大的simulation,對效率有要求的時候,有時還是不得不用C,這可能是10小時和10分鍾的差別,毫不誇張。
SAS流行於公司,R流行於研究機構和大學
數據分析不是單純的靠軟件來做的,需要很好的數學基礎。
統計學工具各有千秋。
https://englianhu.wordpress.com/statistics/
學了R,可以免去學spss,matalab,ucinet等等眾多的軟件,可以減少不少的學習時間,前景應該不錯
如果lz不准備搞數據數據挖掘相關的東西,最好還是學學python一類更通用的語言。如果搞數據挖掘的話,還可以學學hadoop...這種有專業背景的語言不會隨便就消失的,前景不差~
r的數值計算沒有像matlab高精度,比如算出應該是3的,可能r里面輸出2.998。
就一個R和SAS精通程度幾乎相同,在兩種環境下都做過比較大(moderately big, ~xx Gb)的數據分析,與其他語言環境嵌合(SQL, Perl, etc...)使用過的個人(統計專業人員,非編程專業人員)的感受而言:
R的優點:
1. 免費... 開源... (這是最重要的一點好不好,也是SAS流行於公司,R流行於研究機構和大學的最主要原因)
2. 是專門為統計和數據分析開發的語言,各種功能和函數琳琅滿目,其中成熟穩定的一抓一把
3. 語言簡單易學。雖與C語言之類的程序設計語言已差別很大(比如語言結構相對松散,使用變量前不需明確正式定義變量類型等等),但仍保留了程序設計語言的基礎邏輯與自然的語言風格。我這樣說可能讓人聽得雲里霧里,但是如果你對SAS或者SPSS有一點點了解,就會明白我的意思了...
4. 小... 安裝程序只有50Mb左右,比起某些死貴且3個G的付費軟件真的是超級迷你小巧玲瓏... 因為體積輕便,運行起來系統負擔也小。
5. 同各種OS的兼容性好。我兩台本本一台Windows,一台Linux,都用得很順手。相比之下,你有見過人在Mac上用SAS嗎... 這人是要多么的想不開... =. =
6. 因為用的人越來越多,又是開源,有很多配套的“插件”為其錦上添花。比如xtable里有一個函數可以直接將R里的表格導出為TeX格式;另有RStudio的插件讓你可以在同一個環境里寫TeX跑R並可在你的TeX文件中插入你的R代碼,多么的賢良淑德... (這個插件我沒用過,不過我同學一天到晚在用)
7. 有R GUI和RStudio兩種風格供君選擇,說實話我覺得這兩種風格已經涵括了大多數人的使用偏好...
8. 已經提過了開源,還想再強調一下。各種包和函數的透明性極好,這使得對函數的調整和改良變得非常便利。只需要把源碼調出來,自己稍微修改一下就可以了。這種事情放在任何其他統計軟件里都近乎奢望。
9. 如果你做Bayesian,用R你有OpenBUGS, WinBUGS, JAGS等各種成熟活潑的包裹,很多語言又簡單又附帶各種預設的plot,你只需調用即可;還可以自己寫MCMC。如果你用SAS/SPSS/Stata,你可以... @@? = =bbb
10. 漂亮又靈活的圖,大家也都已經講過了。原本不是什么特別突出的長處(有則好,沒也沒啥),不過現在數據可視化越來越熱,也就一躍成為主要優點了。
說說缺點:
1. 對大文本(text data)處理極差... 或者說data management本就不是R的強項。SAS於R的最大優勢之一可能就在於它兼顧了數據分析和數據管理。在SAS里對數據進行各種復雜操作都相對容易,只需要簡單的DATA STEP(必要時結合PROC SQL)即可完成;在R里可就真的是千辛萬苦... 雖然也有相應的aggregate, merge之類的函數,但是大都不太好用。這也是為什么大家常常把數據(尤其是數據大時)在別的環境下整好/分割好再喂給R。人家術業有專攻,數據管理真是有些難為它了。
2. 內存管理和平行處理(parallel processing/programming)都為人詬病。數據小時沒有感覺,數據大了就各種報錯... =. =
3. package的可靠性問題。我第一門完全使用R做作業的課是門統計課,教授已經六十多歲,見過各種統計軟件的出生發展和湮沒。她同我們說到R時第一句話就是Never use a package before you understand the manual and confirm the validity of the functions. 也就是包裹雖然好,使用需謹慎。主要原因還是在於開源。不常用的package一定要搞清楚函數的用法和核實過輸出,不然真的不推薦使用。我個人也是傾向非常用函數盡量自己寫,至少錯了也容易debug...
4. 不得不提的package的版本問題。 就算你確認了包裹的可靠性並熟知了各個變量要怎么用,還是可能掉入潛在的陷阱=. = 講個真事:去年工作的時候一個項目是使用11年某項目的一個貝葉斯模型分析新的數據。當年寫代碼的人因為相信末日說兩年前就已經辭職環游世界去了,於是我只好獨自研讀他的代碼。第一步,很自然的,就是重復當年的分析結果。這時發現當年他用的一個package和現在的R已經不兼容,於是就下載了這個package的最新版本。結果有一個簡單的credible interval怎么都重復不出來... 怎么怎么都重復不出來... 我都快絕望了。最后經各種推理驗證,發現這個區別源自於新舊版本的函數內部在對數據排序之后對NaN的不同處理... 而這個小小的修改未在任何地方留下任何文字記錄。所以怎么說呢... 很多時候還是寫自己的程序靠譜哇...
5. 當你跑比較大的simulation,對效率有要求的時候,有時還是不得不用C,這可能是10小時和10分鍾的差別,毫不誇張。
6. 想不出來樂 =w=
大致就是這樣。
最后,因為不是學計算機出身,文中與編程語言和系統相關的措辭可能不准確或有誤用,請程序員們多包涵=)
RStudio在yihui大神的加入之下有knitr了,不一定要寫TeX,可以寫markdown。
數據管理確實頭疼,所以hadley大神做了plyr和dplyr嘗試改變這一局面。
內存管理多用gc()……
從運行效率出發必然是C厲害,不過開發效率就……???所以出現了Rcpp包
R如果作為一門程序語言確實不怎么樣,感覺從基礎架構往上推都是亂的。最簡單的,函數的參數什么時候值傳遞、什么時候地址傳遞,完全搞不清。語言一點也不簡潔。R的優點就是可以用的package很多也很全,但除此之外真是不喜歡用,比python差遠了。
R內部函數參數從來不傳地址
R語言的語法還是很不錯的, 個人覺得比MatLab好, 然而函數和工具包的體系確實一片狼藉, 函數名毫無規律, 函數對參數的要求千奇百怪, 參數的語義也是千奇百怪, 編程一直離不開在線文檔
一個package一套路子,要用其中一個函數就恨不得把整個manual瀏覽一遍,累死個人。
1. 大文本處理是什么鬼;data management? 你是說data manipulation吧,如果我沒記錯,2014年dplyr早就出來了
2. 內存管理是內存管理,並行處理是並行處理。內存管理R是不咋的。並行處理是MPI和*nix的fork機制,跟編程語言沒關系
3. 教授的意思,不光是可靠性問題吧,還有別光用包用得爽,得知道包后面的統計方法,以及當前是否適用。就包本身,一大票包是統計方法提出人自己寫的,雖然效率可能不咋的,但正確性比Python一大票工程師寫的統計包強多了(沒有鄙視Python的意思)
4. 版本問題,誰也跑不了。*nix的包管理,Python的virtualenv,R的Packrat
5. 效率腳本語言的確比不上編譯語言,除非像Google花大價錢堆出V8的Javascript。不過就算是腳本語言,爛代碼也能比好代碼慢上幾個數量級
另,某樓說函數參數什么時候值傳遞,什么時候地址傳遞,完全搞不清,那只是你搞不清。R的解釋器最初是拿某Scheme的解釋器改過來的,別一看跟想像的或經驗不一致,就覺得“從基礎架構往上推都是亂的”
優點:
- 免費/包多,上手快,還有其他提到的;
- 我們使用下來R最好功能是:畫圖,(ggplot2,plotly,shiny,ggmap,用起來真的很方便),ggplot2畫靜態圖,plotly畫交互圖、shiny可以用網頁交互,ggmap畫地圖類可視化;
- 基於內存,訓練速度還算快,代碼量少;
- 開源,開發者還不少,是個不斷壯大的社區,並且也發展的比較成熟了;
- 輕量,使用數據量相對少的模型項目,幾個G的數據,用16G內存的電腦吃得消;
- Rstudio用起來真的挺好的,界面非常友好,是個很優秀的IDE;
- 很多人懂R語言,寫出來的代碼速度非常慢,特別是有些人老是喜歡寫循環,我想說的是R語言恨透了循環。畢竟不是每個人都會用Rcpp寫代碼的;
- 目前主流的DeepLearning的包都沒有相關的R package,而python通吃;R現在只有一個明星產品mxnet,h2o勉強算1/4;
- 數據量足夠大了之后,R肯定是不適合了,內存要爆掉的;
- R的package非常的泛,開發包的人水平參差不齊,很多package都沒有持續的更新,很多bug都沒有修復(python相對來說會好很多,sklearn持續更新)
- 如果是在服務器上安裝R的package,你想死的心都有,因為依賴、依賴、依賴啊,在不能聯網的服務器上,你要手工的把依賴、依賴、依賴包都線安裝好,心真累;
1.因為package來自不同貢獻者,各個包的使用習慣可能差異極大,這實際上無形中增加了使用者的學習成本。這點實在很難細說,各位答題者應該都或多或少有所體驗。不過,強烈建議初學者注意數據在R中的保存類型(這么說合適嗎?),就是函數class的返回值。如果忽略這個,很可能哪天就卡死在一個函數上了,對於某些奇特的類型,使用常規函數分析前需要預先處理。不過熟悉之后這個基本不會是大問題。
2.package的質量實在參差不齊。
野雞的包不要用。
野雞的包不要用。
野雞的包不要用。
嗯,沒聽過的、沒見過的、不是核心包的包不要用。
如果非要類比的話,Matlab是長槍大戟,攻城略地所用。毋庸置疑,python是沖鋒槍,已經進入現代戰爭(指大數據分析)。然而,R是一柄劍,輕靈銳利。
最后,借用《英雄志》里的一句話:劍是天才的武道。
SAS: 速度快,有大量統計分析模塊,可擴展性稍差,昂貴。
SPSS: 復雜的用戶圖形界面,簡單易學,但編程十分困難。
Splus: 運行S語言,具有復雜的界面,與R完全兼容,昂貴。
用戶需要對命令熟悉:與代碼打交道,需要記住常用命令。
占用內存:所有的數據處理在內存中進行,不適於處理超大規模的數據。
運行速度稍慢:即時編譯,約相當於C語言的1/20。
相比點擊鼠標進行操作,R仍能夠大大提高效率。
缺點:一點沒基礎的人很難起步,不過現在有視頻和培訓了;要精通r很難,這點在上面內存已經說過了,這其實國內統計教育的失敗之處;r包現在發展極快,學習r需要耗費大量精力(嚴格這不是r的問題,而是中國社會環境的問題)
- 能完成絕大部分數據相關的分析、統計、挖掘、可視化等工作
- 能和Hadoop等大數據解決方案一起工作
涉及到中文的時候亂碼問題總是出現
優點:
- 軟件包豐富
- 文檔化幫助信息很友好,簡單易學
- 兼容性好,跨平台
- 對統計分析天然支持
- 有RStudio這種大殺器
缺點:
- 對文本處理不是很靈活,尤其是和Python對比- 當數據大的時候,尤其涉及讀寫文件,感覺效率不是很高(也可能是我自己不會優化)
R總是將數據存儲在內存中,所以不適合做大數據量處理。
R的優點:
1. 免費... 開源... (這是最重要的一點好不好,也是SAS流行於公司,R流行於研究機構和大學的最主要原因)
2. 是專門為統計和數據分析開發的語言,各種功能和函數琳琅滿目,其中成熟穩定的一抓一把
3. 語言簡單易學。雖與C語言之類的程序設計語言已差別很大(比如語言結構相對松散,使用變量前不需明確正式定義變量類型等等),但仍保留了程序設計語言的基礎邏輯與自然的語言風格。我這樣說可能讓人聽得雲里霧里,但是如果你對SAS或者SPSS有一點點了解,就會明白我的意思了...
4. 小... 安裝程序只有50Mb左右,比起某些死貴且3個G的付費軟件真的是超級迷你小巧玲瓏... 因為體積輕便,運行起來系統負擔也小。
5. 同各種OS的兼容性好。我兩台本本一台Windows,一台Linux,都用得很順手。相比之下,你有見過人在Mac上用SAS嗎... 這人是要多么的想不開... =. =
6. 因為用的人越來越多,又是開源,有很多配套的“插件”為其錦上添花。比如xtable里有一個函數可以直接將R里的表格導出為TeX格式;另有RStudio的插件讓你可以在同一個環境里寫TeX跑R並可在你的TeX文件中插入你的R代碼,多么的賢良淑德... (這個插件我沒用過,不過我同學一天到晚在用)
7. 有R GUI和RStudio兩種風格供君選擇,說實話我覺得這兩種風格已經涵括了大多數人的使用偏好...
8. 已經提過了開源,還想再強調一下。各種包和函數的透明性極好,這使得對函數的調整和改良變得非常便利。只需要把源碼調出來,自己稍微修改一下就可以了。這種事情放在任何其他統計軟件里都近乎奢望。
9. 如果你做Bayesian,用R你有OpenBUGS, WinBUGS, JAGS等各種成熟活潑的包裹,很多語言又簡單又附帶各種預設的plot,你只需調用即可;還可以自己寫MCMC。如果你用SAS/SPSS/Stata,你可以... @@? = =bbb
10. 漂亮又靈活的圖,大家也都已經講過了。原本不是什么特別突出的長處(有則好,沒也沒啥),不過現在數據可視化越來越熱,也就一躍成為主要優點了。
說說缺點:
1. 對大文本(text data)處理極差... 或者說data management本就不是R的強項。SAS於R的最大優勢之一可能就在於它兼顧了數據分析和數據管理。在SAS里對數據進行各種復雜操作都相對容易,只需要簡單的DATA STEP(必要時結合PROC SQL)即可完成;在R里可就真的是千辛萬苦... 雖然也有相應的aggregate, merge之類的函數,但是大都不太好用。這也是為什么大家常常把數據(尤其是數據大時)在別的環境下整好/分割好再喂給R。人家術業有專攻,數據管理真是有些難為它了。
2. 內存管理和平行處理(parallel processing/programming)都為人詬病。數據小時沒有感覺,數據大了就各種報錯... =. =
3. package的可靠性問題。我第一門完全使用R做作業的課是門統計課,教授已經六十多歲,見過各種統計軟件的出生發展和湮沒。她同我們說到R時第一句話就是Never use a package before you understand the manual and confirm the validity of the functions. 也就是包裹雖然好,使用需謹慎。主要原因還是在於開源。不常用的package一定要搞清楚函數的用法和核實過輸出,不然真的不推薦使用。我個人也是傾向非常用函數盡量自己寫,至少錯了也容易debug...
4. 不得不提的package的版本問題。 就算你確認了包裹的可靠性並熟知了各個變量要怎么用,還是可能掉入潛在的陷阱=. = 講個真事:去年工作的時候一個項目是使用11年某項目的一個貝葉斯模型分析新的數據。當年寫代碼的人因為相信末日說兩年前就已經辭職環游世界去了,於是我只好獨自研讀他的代碼。第一步,很自然的,就是重復當年的分析結果。這時發現當年他用的一個package和現在的R已經不兼容,於是就下載了這個package的最新版本。結果有一個簡單的credible interval怎么都重復不出來... 怎么怎么都重復不出來... 我都快絕望了。最后經各種推理驗證,發現這個區別源自於新舊版本的函數內部在對數據排序之后對NaN的不同處理... 而這個小小的修改未在任何地方留下任何文字記錄。所以怎么說呢... 很多時候還是寫自己的程序靠譜哇...
5. 當你跑比較大的simulation,對效率有要求的時候,有時還是不得不用C,這可能是10小時和10分鍾的差別,毫不誇張。
除了統計函數包外,對於常規運算,R基本上乏善可陳,語法晦澀,性能奇差;所以現在R大有被python取代的趨勢。
對於結構化數據計算,R的集合式語法和data frame對象已經被python的pandas包復制了,但是這兩者做的都還不夠好。這方面更有優勢的開發語言是esproc,提供了遠比data frame更強大的數據對象,同樣有集合式語法但更自然易懂,遍歷外存文件數據的的性能超過R的十倍以上。
下載了這本書的試讀的16頁,首先顏色排版看着是很舒服的,列子講解也比較詳細,並配有相應圖片。因為是初學者,所以很是希望看到書籍中具體事例,比如書中的燈泡的平均壽命那個,可是不知道能從事例弄出來的指數分布曲線圖分析出些什么(沒有統計分析的底子,看這些比較難,主要不知道最后怎么去應用)。
R語言對我來說難點就是沒有統計分析學背景,並且很多數學公式完全不知道怎么回事。對算法基本上算小白。不過時間充足的情況下這些都是可以攻克的。
1. 大家覺得R語言難學嗎?困擾你的主要是什么?
R語言非常易於入門,它的函數的使用很簡單,開發IDE的使用也很簡單。
我們最愛使用的是RStudio開發工具。
但是,精通R語言也有一些難點或者說是困擾,主要表現在:
1)R語言的包/庫極其龐大,有數千個,很多時候你並不知道該使用什么包/庫來解決問題。
2)正如第一點所說,庫太多,並不是所有的包/庫都是高質量的,使用某些庫分析數據得出的結果有可能是相互矛盾的。
3)R語言跟概率論和數理統計結合緊密,數學功底不深的話,難以精通R語言。
2. R可以實現數據分析中的哪些工作?
R語言可以實現數據分析中的絕大多數工作。
可以進行數學運算;
可以進行 統計和分析;
可以做快速傅里葉變換;
可以進行平滑和濾波;
可以做基線和峰值分析。
- 數據傳遞及服務(RHive、Rserve、rJava)
- 清洗及預處理(sqldf、stringr、XML)
- 抽樣、分類、關聯覎則、特征選擇、稀疏矩陣運算、矩陣分解、社交網絡
- 高性能計算(rhdfs、rmr2、Rcpp)
等等
3. 你曾經使用或編寫過R軟件包嗎?
曾經在某個項目中頻繁使用。后來用Python的數據分析包更多一些。
一句話,不限於R語言,快速解決問題是根本。
4. 說說您讀完試讀樣章后的啟發
樣章提供了第四章“隨機數與抽樣模擬”的內容,從這章的內容來看,書籍描述比較淺顯易懂,並沒有長篇大論的理論分析,而是以例子為主,伴隨講述了很多函數。不錯的書,渴望一讀。
從統計學本身來說,R與其他的軟件都是可以大大地增加生產力的輔助工具。並且R與商用軟件相比,着實有些寒磣。從樣章來看,不太喜歡這樣羅列各種功能的結構,如果能夠以一個案例的形式講解如何應用的具體場景,效果會更好些。
1如何掌握r
答:要想快速掌握R的最好方法是選擇一本叫好的參考書,跟着參考書學一遍即基本上學會R了,當然如果要想熟練使用,還是需要自己在實際的數據分析中多用多思考。
2實際數據分析中r使用有什么可以分享的經驗
答:實際分析中R的使用要具體問題具體分析。一般來講:(1)在讀入數據之前,先看一下每個變量的類型,是連續的還是離散的?往往離散的變量需要轉換成虛擬變量;(2)寫code過程中,勤加注釋,因為可能過幾個幾天都不認識自己寫的code了;(3)寫程序時盡量少用循環,能用矩陣運算盡量用矩陣運算。
3內存溢出如何辦
答:內存問題始終是限制R的一個問題之一。一般來講,加大內存是最好的方法,所以碰到海量數據時,建議一般用HPC(高性能計算機)去運算;另一方面看看有無可能優化自己的算法,尤其是不要有太多的循環,循環是R的薄弱環節。此外,還可以清理一些不用了的對象來釋放內存,如果真的需要大計算的話,可以看一些處理大內存對象與並行計算的軟件包等,比如bigmemory等。
4數據分析算法如何根據問題選擇
答:數據分析算法的選擇是非常復雜的一個問題,這個不僅僅是R的問題了,而是統計的問題,每種統計方法、算法都有其適用的條件,不是所有場合都套上去就可以了,所以學習R來說,其實最好是結合統計、數據分析的方法來學是最好的。
5異常數值和缺失數值如何處理
《R數據分析-方法與案例詳解》的第5章有講解,請參考。
6特征變量如何構造,衍生變量如何構造
《R數據分析-方法與案例詳解》的第5章有講解,請參考。
R的短板在於安全性與內存管理
說了這么多優勢,R語言當然也存在着一定不足。“內存管理、速度與效率可能是R語言面臨的幾大最為嚴峻的挑戰,”Adams指出。“在這方面,人們仍然需要努力推動——而且也確實正在推動——其進展與完善。此外,從其它語言轉投R懷抱的開發人員也會發現后者在某些設定上確實有些古怪。”
R語言的基本原理來自上世紀六十年代出現的各類編程語言,Peng解釋道。“從這個意義上講,R語言在設計思路上屬於一項古老的技術成果。”這種語言的設計局限有時候會令大規模數據集處理工作遇到難題,他強調稱。因為數據必須被保存在物理內存當中——但隨着計算機內存容量的不斷提升,這個問題已經在很大程度上得到了解決,Peng指出。
安全等相關功能並沒有被內置在R語言當中,Peng指出。此外,R語言無法被嵌入到網絡瀏覽器當中,Peng表示。“我們不能利用它開發Web類或者互聯網類應用程序。”再有,我們基本上沒辦法利用R語言當作后端服務器執行計算任務,因為它在網絡層面缺乏安全性保障,他表示。不過Amazon Web Services雲平台上的虛擬容器等技術方案的出現已經在很大程度上解決了此類安全隱患,Peng補充道。
長久以來,R語言當中始終缺少充足的交互元素,他表示。但以JavaScript為代表的各類編程語言介入其中並填補了這項空白,Peng指出。雖然我們仍然需要利用R語言處理分析任務,但最終結果的具體顯示方式則可以由JavaScript等其它語言來完成,他總結道。
R語言並不單純面向高端程序員
不過Adams與Peng都會R視為一種易於接受的語言。“我本人並沒有計算機科學教育背景,而且從來沒想過要當一名程序員。將編程基礎知識納入技能儲備當然很不錯,但這並不是上手R語言的必要前提,”Adams指出。
“我甚至並不認為R語言只適用於程序員。它非常適合那些面向數據並試圖解決相關問題的用戶——無論他們的實際編程能力如何,”他強調稱。
http://www.itpub.net/thread-1913151-1-1.html
http://www.dataguru.cn/article-8508-1.html
