r語言中有的一些取整運(yùn)算
在編程實(shí)現(xiàn)的時(shí)候有時(shí)會(huì)碰到對(duì)數(shù)值取整的需求,而取整的方式卻多種多樣,依賴于具體問題,不過在R中已經(jīng)配備了種類齊全的相關(guān)函數(shù)。
? ? ? ?主要包括以下五種:floor():向下取整;ceiling(): 向上取整;round(): 四舍五入取整;turnc(): 向0取整;signif(): 保留給定位數(shù)的精度。
python與r語言哪個(gè)好—總概括:
R主要在學(xué)術(shù)界流行,python(numpy scipy)在工程方便比較實(shí)用。
R是S(Splus)的開源版本,或者下一代。發(fā)源地在新西蘭奧克蘭。這個(gè)軟件的統(tǒng)計(jì)背景很濃烈。我這里濃烈的意思是,如果你不熟習(xí)統(tǒng)計(jì)知識(shí)(歷史)的話,R的幫助文檔看起來是很累的。由統(tǒng)計(jì)背景的人開發(fā)。R的維護(hù)組叫CRAN-R。在生物信息方便,有個(gè)叫bioconductor的組織,里面有很多生物信息方面可以用的軟件包,他們有一套自己維護(hù)package系統(tǒng)。
Python是個(gè)綜合語言(這里特指指CPython解釋器),numpy scipy是數(shù)值計(jì)算的擴(kuò)展包,pandas是主要用來做數(shù)據(jù)處理(numpy依賴),sympy做符號(hào)計(jì)算(類似mathematica?)此外還有一些不太成熟的包如sciki learn,statistical models。成熟度不如R。但是已經(jīng)到了可用的水平了。是讀計(jì)算機(jī)的人寫的統(tǒng)計(jì)包。ipython 更新到1.0以后,功能基本完善,其notebook非常強(qiáng)大(感覺就像mathematica)而且還是基于web,在合作分享方面非常好用。
性能:
大家都說R慢,特別是CS的人。其實(shí)這里主要是兩點(diǎn):一個(gè)R里面數(shù)組的調(diào)用都是用復(fù)制的,二是Rscript慢。三是處理大數(shù)據(jù)慢。如果R用的好的話,R是不太慢的。具體來說就是Rscript用的少,多用命令,跑點(diǎn)小數(shù)據(jù)。這樣的話,實(shí)際在跑的都是背后的fortran和C庫。他們都有快二三十年歷史了。可謂異??煽?,優(yōu)化得不能再優(yōu)化了(指單線程,如果去看源代碼揮發(fā)先許多莫名的常數(shù),永用了以后精度高速度快!)。比如一個(gè)自己編寫一個(gè)R腳本,loop套loop的那種,那真是想死的心都會(huì)有。外加一點(diǎn),R處理文本文件很慢!
Python歸根揭底還是個(gè)有解釋器的腳本語言,而且有致命傷——GIL,但python最難能可貴的就是它很容易變得更快。比如pypy,cython,或者直接ctypes掛C庫。純python寫個(gè)原型,然后就開是不斷的profiling和加速吧。很輕易可以達(dá)到和C一個(gè)數(shù)量級(jí)的速度,但是寫程序、調(diào)試的時(shí)間少了很多。
并行計(jì)算:
R v15 之后有了自帶的parallel包,用挺輕松的。不過其實(shí)就是不停的fork,或者mpi,內(nèi)存消耗挺厲害的。parSapply,parApply什么的,真是很好用。
Python雖然有GIL——并行計(jì)算的死敵,但是有multiprocessing(fork依賴) ,是可以共享數(shù)據(jù)的什么的,估計(jì)內(nèi)存消耗方面比R好點(diǎn),數(shù)據(jù)零散的話overhead很多。到了MPI的話,mpi4py還是挺好用的。用cython的話結(jié)合openmp可以打破GIL,但是過程中不能調(diào)用python的對(duì)象。
學(xué)習(xí)曲線:假設(shè)什么編程都不會(huì)的同學(xué)。
R一開始還是很容易上手的,查到基本的命令,包,直接print一下就有結(jié)果了。但是如果要自己寫算法、優(yōu)化性能的時(shí)候,學(xué)習(xí)難度陡增。
Python么,挺好學(xué)的,絕大多數(shù)的幫助文檔都比R好了許多。有些包用起來沒R方便。總的來說深入吼R陡。
擴(kuò)展資源:
基本上新的統(tǒng)計(jì)方法都會(huì)有R的package,安裝實(shí)用都不麻煩。但是基本上都是搞統(tǒng)計(jì)的人寫的計(jì)算機(jī)包。所以效能上可能有問好。比較出名的有兩個(gè)包的管理網(wǎng)站,cran-r 和bioconductor。 所以搞生化的估計(jì)R用起來很方便。
python的統(tǒng)計(jì)計(jì)算包們比R少,多很年輕,還在不斷的開發(fā)中。優(yōu)于是計(jì)算機(jī)人寫的統(tǒng)計(jì)包,用起來的時(shí)候要多漲個(gè)心眼。
畫圖:
R自帶的那些工具就挺好用了,然后還有g(shù)gplot這種非常優(yōu)美的得力工具。
python 有matplotlib,畫出來效果感覺比R自帶的好一些些,而且界面基于QT,跨平臺(tái)支持??赡苁荝用得多了,pyplot用起來還是不太順手,覺得其各個(gè)組建的統(tǒng)一性不高。
IDE:
Rstudio非常不錯(cuò),提供類matlab環(huán)境。(用過vim-r-plugin,用過emacs + ess現(xiàn)在用vim。)
windows 下有python(x,y) 還有許多商業(yè)的工具。(本人現(xiàn)在的emacs環(huán)境還不是很順手~)
建議:
如果只是處理(?。?shù)據(jù)的,用R。結(jié)果更可靠,速度可以接受,上手方便,多有現(xiàn)成的命令、程序可以用。
要自己搞個(gè)算法、處理大數(shù)據(jù)、計(jì)算量大的,用python。開發(fā)效率高,一切盡在掌握。
ps:盲目地用R的包比盲目的地用python的包要更安全。起碼R會(huì)把你指向一篇論文,而python只是指向一堆代碼。R出問題了還有論文作者、審稿人陪葬。
python和r語言的區(qū)別對(duì)比
網(wǎng)上有很多關(guān)于數(shù)據(jù)科學(xué)到底該用哪個(gè),哪個(gè)到底好,誰更有前途的文章,一搜一大把。但我還是要寫一下我的觀點(diǎn):
分析比較這兩種語言到底哪個(gè)好,得看你的用途。比如我只需要分析數(shù)據(jù),即導(dǎo)入數(shù)據(jù),分析數(shù)據(jù),可視化,那按理說R語言確實(shí)很占優(yōu)勢(shì)。如果想在學(xué)習(xí)工作之外再將編程語言應(yīng)用的話,毫無疑問python更占優(yōu)勢(shì),有句話是這么說的“人生苦短,請(qǐng)用python”。
單就數(shù)據(jù)分析對(duì)比,我認(rèn)為R的優(yōu)勢(shì)有:
1、學(xué)習(xí)先易后難,不會(huì)把小白們嚇掉;
2、數(shù)據(jù)科學(xué)的包特別多
3、可視化特別吊
R的缺點(diǎn)也不少:
1、R經(jīng)常更新,更新后經(jīng)常不支持之前你安裝的包;我電腦里安裝了10+個(gè)R的版本,不停的切換
2、R語言的包、函數(shù)名起的很隨意,看名字不知道是干什么用的,記不起名字如何讓小白使用啊。
3、R語言社區(qū)人少,遇到問題你只能自己解決
4、即使有RStudio,寫代碼還是不方便
下面再說下python,優(yōu)點(diǎn):
1、是一門看的懂的,說人話的語言。庫名、函數(shù)名都很好理解記憶,而且你看別人寫的代碼基本知道這代碼的意思,不信你試試。
2、數(shù)據(jù)獲取占優(yōu)勢(shì),數(shù)據(jù)分析第一步是數(shù)據(jù)獲取,現(xiàn)在人文社科很多數(shù)據(jù)需要網(wǎng)上抓取,不過就抓數(shù)據(jù)而言,python更占優(yōu)勢(shì)。各種教程,代碼,網(wǎng)上一大片。
3、社區(qū)人數(shù)特別多,基本你遇到的問題都能找到
python的缺點(diǎn):
1、學(xué)習(xí)起來,開頭很難,學(xué)習(xí)曲線與R正好相反。
2、公平起見,我還是寫上,python的數(shù)據(jù)分析庫不如R多
3、可視化不如R
最關(guān)鍵的是R的收集數(shù)據(jù)這方面,網(wǎng)上特別少,搜有關(guān)R爬蟲的也很少。
于是我五月份開始轉(zhuǎn)頭學(xué)python,而且我是一開始就學(xué)python3,堅(jiān)持選擇有前途的版本,堅(jiān)持。目前我已經(jīng)可以用python爬數(shù)據(jù)了。
綜合下,建議大家學(xué)習(xí)python,語言通俗易懂,功能強(qiáng)大,越來越簡(jiǎn)單。
評(píng)論
查看更多