題:
R和Python在數據科學方面如何互補?
BioHazZzZard
2016-10-06 13:57:03 UTC
view on stackexchange narkive permalink

在許多教程或手冊中,敘述似乎暗示R和python作為分析過程的補充組件共存。但是,對我而言,這兩種語言似乎在做同樣的事情。

所以我的問題是這兩種語言是否真的有專門的細分市場,或者使用一種或另一種只是個人喜好?

這看起來確實不像該線程的副本。這不是關於如何使用Python進行統計,而是關於Python如何對R進行補充(顯然,R將用於進行統計分析)。
如果您是10年前的統計學家,則為R。如果您想將代碼投入生產或重用,請使用Python。
相關:http://datascience.stackexchange.com/questions/326
由於此問號的流行,並且響應通過標誌的請求,我重新打開了它,但將其設為CW。
大多數答案往往會忘記的是,他們正在將*語言* Python與*實現* GNU-R進行比較。R還具有其他實現(請參見用Java編寫的“ Renjin **”,使用Intel MKL編譯的“ Microsoft R Open **”,“ FastR **,** pqR **等)。這些試圖糾正GNU-R(一種更為保守的實現)的某些問題。另外,請記住,R沒有正式定義。
九 答案:
Yuval Spiegler
2016-10-06 15:26:23 UTC
view on stackexchange narkive permalink

它們是互補的。確實,兩個都可以做,但是大多數語言都可以做到這一點。每個都有其優點和缺點。普遍的看法是,Python最適合用於數據收集和準備以及文本分析。 R被認為是進行數據分析的最佳選擇,因為它首先是一種統計語言。

R包含各種您可以想到的東西的大雜燴,但是它的主要內容是統計分析-從基本的卡方分析到因子分析以及危害模型,它簡單而強大。統計中的一些知名人士創建了R程序包,並且它有一個活躍的社區來滿足您的各種需求。 ggplot2 是數據可視化(圖形等)的標準。 R是向量化語言,旨在有效地遍歷數據。它還將所有數據存儲在RAM中,這是一把雙刃劍-它在較小的數據集上比較快(儘管有些人可能會與我爭論),但它不能很好地處理大數據(儘管它具有繞過此包的軟件包) ,例如 ff )。

Python比R容易得多-特別是對於那些以前有編程經驗的人。 R只是...很奇怪。 Python擅長數據檢索,並且是用於Web抓取的語言(帶有令人驚嘆的 beautifulsoup )。 Python以其在字符串解析和文本處理方面的優勢而聞名。 pandas 是用於數據處理,合併,轉換等的出色庫,並且速度很快(可能受R啟發)。

當您需要進行一些編程時,Python很棒。這並不奇怪,因為它是通用語言。但是,R及其所有擴展都是由統計學家為統計學家建立的。因此,儘管Python在許多應用程序中可能變得更容易,更好,更快,但R將成為統計分析的首選平台。

作為一個既了解又了解的人,我同意這一點。可能會有很多風格上的爭論,但是最大的區別是,一旦真正運行因果統計模型的時間到了,Python就會變得不發達。* statsmodels *軟件包為您提供了一些基礎知識,但不適用R,Stata或Sas。機器學習風格分析是一個值得注意的例外,Python的* scikitlearn *可以很好地匹配它。對於其他所有方面,我認為可以說Python至少等於R並且通常更好。學習兩者絕對不是浪費時間。
我大部分都同意-但會更多地強調問題-R不適用於大型數據集,並且不能很好地處理稀疏數據集(大多數庫不支持它)(很多人在其中進行機器學習)例如,“詞袋”類型的模型,其中因子/分類變量的基數可能在1000s之內。
另一個要點是*如何*一起使用-有RPy2包,它允許將熊貓數據幀轉換為R並調用R庫
不是在註釋線程中開始變元,而是R中的`data.table`包專門用於圍繞大型數據集進行有效工作,並將精細處理插入分佈式處理中。
換句話說,對於大型應用程序,請將R用作外部庫/依賴項,對於非統計應用程序邏輯,請使用Python(或C或Java,或您喜歡的任何一種)。這是準確的摘要嗎?
@StockB是和否。在一個完美的世界中,我們將利用每件事物的優勢,僅此而已,並在它們之間實現無縫集成-seanv507和Kodiologist提供了選擇。在實踐中,這只是我的有限經驗,您會遇到一些限制,例如您對某些語言的適應程度或同齡人使用的工作流程。我在R方面比較擅長,因此可以將它用於很多方面,包括通過Python進行字符串操作。我寧願使用R而不是Java來完成一些簡單的任務,但是對於純OO語言而言,這樣做會更令人討厭(從API檢索數據)。
如果您認為Python在數據檢索和字符串解析方面比R更好,那麼您一直都在錯誤地使用R。*“ R不適用於大型數據集,並且不能很好地處理稀疏數據集(大多數庫不支持它)”。
添加了Trevor對`data.table`的增強;我也很高興地說`rvest`是用於處理大多數抓取任務的出色工具,並且比`beautifulsoup`更易於啟動和運行。
Perl在字符串處理方面比python更好,更快。但是更難學習。
從什麼時候開始,R被“構建為有效地遍歷數據”?那是個神話。參見:http://biostat.mc.vanderbilt.edu/wiki/pub/Main/SvetlanaEdenRFiles/handouts.pdf。sapply循環等(即向量化循環)是語法糖(充其量),並且速度很慢(R中的for循環也是如此)。
@warship,我認為他的意思是“向量化時”。請注意,* apply函數係列未進行矢量化處理(請參閱[here](http://stackoverflow.com/q/28983292/1217536))。
@gung好吧,那很有意義!
對於大型數據集,R和Python都具有Apache Spark API。我們也可以提及R`sparklyr`軟件包,它有助於使用Spark。
gented
2016-10-08 16:22:40 UTC
view on stackexchange narkive permalink

我將嘗試使用這兩種語言的人來提出答案,以解決這兩種語言在數據科學/統計/數據分析等方面發揮作用的要點。

數據分析的工作流程通常包括以下步驟:

  1. 從某種來源(很可能是SQL / noSQL數據庫或.csv文件)中獲取數據。
  2. 以一種體面且合理的格式(數據幀)解析數據,以便人們可以進行操作並據此進行思考。
  3. 對數據應用某些功能(分組,刪除,合併,重命名)。
  4. 對數據應用某種模型(回歸,聚類,神經網絡或任何其他或多或少複雜的理論)。
  5. 向或多或少的技術受眾部署/展示結果。
  6. ol>

    獲取數據

    99%的時間裡,獲取數據的過程歸結為查詢某種SQL或Impala數據庫:PythonR都有特定的客戶端或庫,這些客戶端或庫可立即且同樣出色地完成工作( RImpala ,用於R的 RmySQL 和用於Python的 MySQLdb 可以正常工作,實際上並沒有增加太多)。在讀取外部.csv文件時,用於R data.table 程序包提供了 fread 函數,該函數可以讀取大型複雜的.csv文件,並在其中包含任何自定義解析選項。沒有時間,並將結果直接轉換為具有列名和行號的數據框。

    整理數據框

    我們希望將數據存儲在某種表中,以​​便我們可以輕鬆訪問任何單個條目,行或列。

    R data.table 提供了無與倫比的方式來標記,重命名,刪除和訪問數據。標準語法非常類似於SQL,如 dt [i,j,fun_by] ,其中意為 dt [where_condition,select_column,grouped_by(或類似名稱)] 代碼>;可以在其中以及 j 子句中放置自定義的用戶定義函數,這樣您就可以完全自由地操作數據並將任何復雜的或複雜的函數應用於組或子集(例如第i行,第k個元素,並將其求和到第(i-1)行的第(k-2)個元素,當且僅當整列的標準偏差為“是”時,完全按最後一列分組)。看看基準和關於SO的另一個令人驚奇的問題。對列和行進行排序,刪除和重命名就可以完成它們,標準的矢量化R方法 apply,sapply,lapply,ifelse 可以對列和數據幀執行全部矢量化操作,而無需循環遍歷每個元素(請記住,每當您在R中使用循環時,都會犯錯)。

    Python的反武器是 pandas 庫。最後,它提供了一種結構 pd.DataFrame (標準Python缺少這種結構,由於某種原因我還是不知道),該結構將數據按其本身來對待,即數據幀(而不是某些 numpy數組,numpy列表,numpy矩陣或其他)。分組,重命名,排序等操作很容易實現,在這裡,用戶也可以使用Python apply lambda 。我個人不喜歡語法 df [df.iloc(...)] 來訪問條目,但這只是個人喜好,完全沒有問題。分組操作的基準仍然比R data.table 差一點,但是除非您想節省0.02秒的編譯時間,否則性能不會有太大差異。

    字符串

    R處理字符串的方法是使用 stringr 包,該包允許輕鬆進行任何文本操作,字謎,正則表達式,尾隨空格或類似操作。它也可以與JSON庫結合使用,這些JSON庫解壓縮JSON字典並取消列出其元素,從而使人們擁有一個最終的數據幀,其中的列名和元素是它們所必須的,而沒有任何非UTF8字符或空白在那裡。

    Python的Pandas .str。在處理正則表達式,尾隨或其他方面都表現出與競爭對手相同的工作,因此即使在口味上也沒有太大差異。

    應用模型

    在我看來,這是兩種語言之間出現差異的地方。

    R擁有無與倫比的庫集,這些庫使用戶基本上可以在一到兩行代碼中完成他們想要的任何事情。標準函數或多項式回歸以單線執行,並產生其係數易於閱讀的輸出,以及相應的置信區間和p值分佈。同樣對於聚類,對於隨機森林模型,對於樹狀圖,主成分分析,奇異值分解,對數擬合,等等。上面每一個的輸出很可能帶有一個特定的繪圖類,該類生成可視化的可視化內容,並用顏色和氣泡表示係數和參數。假設檢驗,統計檢驗,Shapiro,Kruskal-Wallis等可以通過適當的庫以一行代碼進行。

    Python試圖跟上 SciPy scikit-learn 。大多數標準分析和模型也都可用,但它們的編碼時間稍長,而讀取則不太直觀(我認為)。雖然可以追溯到已經存在的庫的某些組合,但是缺少更複雜的機械。我更喜歡在Python中而不是在R中做的一件事是使用二字組,三字組和更高階的詞袋文本分析。

    呈現結果

    這兩種語言都有漂亮的繪圖工具,首先是R ggplot2 和相應的Python等效項。雖然競爭並不多,但它們可以安全可靠地完成工作,儘管我相信,如果您要展示結果,則可能必須使用其他工具-那裡有花哨的色彩繽紛的設計工具,而且沒有Python R也不用花哨的紅色和綠色拖放來使觀眾驚訝。 R最近在其 shiny應用功能上發布了許多改進,這些改進基本上使它能夠生成交互式輸出。我從不想學習它,但我知道它在那里而且人們很好地使用了它。


    旁注

    作為旁注,我想強調指出,兩種語言之間的主要區別在於Python是通用編程語言,由計算機科學,可移植性,部署等製成,並由它們製成。它的功能很棒,而且學習起來很簡單;沒有人不喜歡python。但這是一種進行編程的編程語言。

    另一方面,R是由數學家,物理學家,統計學家和數據科學家發明的,並且是為他們而創造的。如果您來自那個背景,那麼一切都會非常有意義,因為它完美地反映和重現了統計和數學中使用的概念。但是,如果相反,您是計算機科學背景的,並且想在R中模擬Java或C,您將很失望。它沒有標準意義上的“對象”(嗯,有,但是沒有人通常認為的...),它沒有標準意義上的類(是,但沒有通常意義上的類)認為它們是……),它沒有“指針”或所有其他計算機科學結構-只是因為它不需要它們。最後但並非最不重要的一點:文檔和軟件包很容易創建和閱讀(如果使用Rstudio);那裡有一個龐大而熱情的社區,而Google花費大約五秒鐘的時間“如何在R中執行插入隨機問題”,其第一項將您重定向到具有相應代碼的問題的解決方案(由他人完成) ,很快。

    大多數工業公司的基礎設施都使用Python(或Python友好環境)構建,可以輕鬆集成Python代碼(只需在任何地方 import myAnalysis 即可完成)。但是,任何現代技術,服務器或平台都可以輕鬆運行後台R代碼,而不會出現任何問題。

+6,這是一個很好的答案:詳盡,準確和平衡。
+1最佳答案在這裡。 很好笑,我從Java來到R(儘管不是直接聯繫),我對此非常滿意。我不一定認為在R中執行循環意味著您做錯了。我發現自己有時會嘗試嘗試使用循環來撓頭,但找不到解決方法(例如,根據前一行的條件在數據集中創建新的變量值,並從輔助數據集中獲取數據)。
如果只有這麼多的R包可以在陽光下做任何事情,都是由知道如何進行統計計算/編寫可靠且健壯的數值數學軟件/知道數值分析等知識的人員編寫的。某些R包非常好。很大的R包,甚至是一些著名作家寫的R包,都是垃圾-很多用戶甚至沒有意識到他們正在獲取垃圾。哦,它在CRAN中,它必須是好的,或者至少是正確的,或者是可靠的……錯誤!!!!
“到今天為止,R擁有無與倫比的庫集,這些庫使用戶基本上可以在一到兩行代碼中完成他們想做的任何事情。”我同意100%,除非獲得正確答案是用戶想要的事情之一。
@MarkL.Stone您介意舉一個由著名用戶編寫的標準程序包示例,該程序產生錯誤結果嗎?
Haitao Du
2016-10-06 19:53:53 UTC
view on stackexchange narkive permalink
  • Python是一種通用的編程語言:因此,它除了執行數據分析外,還可以執行許多其他任務。例如,如果我們要在生產服務器中自動化模型執行,那麼python是一個很好的選擇。其他示例包括連接到硬件/傳感器以讀取數據,與數據庫進行交互(諸如JSON之類的關係或非結構化數據),解析數據,網絡編程(TCP / IP),圖形用戶界面,與Shell進行交互等(嗯,數據科學家為什麼要執行這麼多與預測模型無關的任務呢?我認為人們有不同的定義什麼是數據科學家?在某些組織中,數據並使用儀表板進行描述性分析對於業務而言已經足夠好,數據對於進行預測模型而言還不夠成熟;另一方面,在許多小型公司中,人們可能希望數據科學家進行大量的軟件工程。讓您獨立於其他軟件工程師。)

  • R有很多統計軟件包,它們比python或MATLAB好得多。通過使用R,人們可以真正地在模型級別而不是實現細節級別進行思考。這是開發統計模型的巨大優勢。例如,許多人正在python中手動實現神經網絡。進行此類工作可能無法幫助您理解神經網絡為何起作用,而只是按照配方復制他人的工作以檢查其是否起作用。如果我們使用R語言,則可以輕鬆地關注模型背後的數學,而不是實現細節。

在許多情況下,人們會一起使用它們。使用python可以輕鬆構建軟件,而使用R可以輕鬆構建模型。如果我們要在生產環境中交付模型而不是紙質文件,則可能需要兩者。如果您的公司有很多軟件工程師,則可能需要更多的R。如果您的公司有很多研究科學家,則可能需要更多的python。

很好的答案,但是您寫了“ Jason”而不是“ JSON”,確實給了我一個很好的笑聲
我實際上不是統計學或“機器學習”社區的成員,但我認為高級軟件包的可用性在一定程度上取決於社區。我可以相信,R代碼附帶了許多最新的最新統計技術。但是,當我看到帶有(“高級”)代碼的計算機視覺/機器學習/神經網絡論文時,它們似乎是Matlab或python。
+1討論語言如何影響人們的思維方式。由於R由統計學家為統計學家建立,因此R的巨大優勢在於,它如何鼓勵人們進行建模。披露:我精通R,但僅涉足Python。
嗯...`scikit-learn`怎麼樣?http://scikit-learn.org/stable/
djechlin
2016-10-07 02:53:55 UTC
view on stackexchange narkive permalink

各個階層的程序員低估了文化的語言選擇。像Node.js這樣的Web開發人員。科學家喜歡Python。作為一名能夠同時處理Javascript的流暢性和Java的剛性的多語言軟件工程師,我意識到這些語言對彼此的工作不利並沒有內在的原因-只是大量的軟件包,文檔,社區,書籍,等等。

(出於內在原因,一種隨機語言要比其他某種語言更好,請參見即將對此答案發表的評論。)

我個人的預測是Python是未來的方式,因為它可以完成R可以做的所有事情-或更確切地說,R可以做的一切足以讓專門的程序員努力填補空白-並且是 far 更好的軟件工程語言。軟件工程是一門涉及以下領域的學科:

  • 充分信任您的代碼的可靠性以將其投入生產(因此,任何可以為用戶提供實時服務的機器學習模型)
  • 確保您的代碼在進行修改和重用(例如,單元測試框架)時可以繼續工作
  • 專注於可讀性,以造福他人,並在短短6個月之內使您自己受益
  • 高度重視代碼組織,以便於版本控制,回退到以前的工作版本以及由多方並發開發
  • 首選具有更好文檔的工具和技術,理想情況下,除非您正確使用它們,否則它們根本無法使用(這是我對Matlab的最大抱怨-我在Google上提問,我必須通讀它們相當糟糕的論壇中尋找答案)

坦率地說,Python更易於學習。

科學家和統計學家將意識到他們是良好軟件工程實踐的利益相關者,而不是獨立且不受干擾的職業。只是我的看法,但是證明學術準則易碎的論文將支持這一點。

這個答案是我的全部觀點-但您提出了一個非常自以為是的問題,並且由於到目前為止它已廣為接受,所以我認為您應該得到一個樸實無華,合理的(我希望!)觀點作為回應。對於Python來說,關於R的爭論是很嚴重的,當現實本身可能是黨派的時候,我會拒絕發布無黨派的答案。

朱莉婭長大後,會不會比Python更好呢?
@kjetilbhalvorsen的“成長時”更像是一種“如果”,很難取代一種既定的語言,並且您是否願意採用前沿技術,而永遠不會被牢固地採用,這基本上是個人選擇。IMO,Python現在勢頭強勁。我對Julia並不是很熟悉,因此這是一個相當普遍的看法。
除了第一個項目符號外,我看不到Python在其他四個方面的優勢。
*“ Python可以完成R可以做的所有事情” *是錯誤的。*“足夠多的專業程序員可以填補空白” *,這對於世界上的任何事物都是正確的-只要有人在上面做,任何事情都可以做。
@GennaroTedesco不,我說的是,不是假設有人可以。例如,Javascript和Perl並沒有成為統計分析活動的溫床,而R和Matlab並未在網絡服務中使用。
@Firebug我跟不上R生態系統,因此請隨時通知我-我只想指出,由於其他四個問題,第一個項目符號只能成立。
@djechlin完全沒有。您的可靠性示例是“因此,任何可以實時為用戶服務的機器學習模型”。Python的優勢在於,它比R更容易支持部署,而且僅此而已。單元測試,可讀性,組織和文檔不是內在的品質。您可以實施自己的測試,使您的代碼更易於閱讀,組織和編寫R文檔,這真的很容易理解。
@Firebug,並不是完全正確嗎?是的,任何語言都可以做任何事情,為什麼甚至不使用bash進行統計分析?但是djechlin所指的是,帶有可用庫的python(甚至只有標準庫也是如此!)非常適合單元測試,可讀性(是的。當然,您可以使R“更具可讀性”,但是python本質上就是這樣)以及組織和文檔(R很好,python很好)。在這些方面,它的構造才更好。你不這樣認為嗎
編程語言從本質上綁定到其開發環境,其中包含該語言的一組工具和庫。它們以_我們無法分開對待_的方式鏈接。這可能表明我可以在Node.js中準備用於機器學習的數據,但是我嘗試了一下,但從必須讀寫hdf5文件的那一刻起就失敗了。您可能會建議JavaScript不適合用於機器學習(這值得商de),但這並不總是問題所在:如果我們擁有更加積極維護的庫,Rust對於數據科學家而言將是一門出色的語言。
Robin Gertenbach
2016-10-07 18:25:11 UTC
view on stackexchange narkive permalink

我是R用戶,但我認為Python是未來(我不認為這是語法)

Python是未來
Python的好處在於,其他人已經提到了更廣泛的支持,並且對於程序員來說,邏輯語法也更豐富。
同樣,您可以將分析結果轉化為生產系統的功能也更加簡單​​。
也許是因為Python是通用的,而不是R,但是當我看到生產化的R管道時,我甚至大為驚訝。
不僅如此,即使對於高級應用程序,Python也在迅速趕上(Scikit-learn,PyBrain,Tensorflow等),而R在如何實現統計方法方面仍然是學術界的通用語言,由於先進的專業圖書館的出現。

但是R還不錯
許多人似乎喜歡跳上“ R語法不好”的潮流。
我希望提出R的語法是一件好事!
使用R時,賦值函數,惰性評估,非標準評估和公式具有很大的優勢。
它只是節省了很多時間,不必擔心轉義摘要中引用的變量名或擔心如何針對什麼建模邏輯或使用 names()查看名稱,然後分配新的名稱通過添加 <- c(“ A”,“ B”,“ C”)來命名。
當人們抱怨R的怪異語法時,他們將其視為一種編程語言,而不是一種數據科學工具。
作為來自R並熱愛dplyr的人,與之相比,我發現pandas的語法有點笨拙。
是的,它稍微靈活一些,但是對於大多數任務,執行一次簡單命令要比在R中花費更多的擊鍵,而這僅僅是為了滿足Python的解析器,而不是表達您的想法。

摘要
當然,兩者都知道是明智的,而在Python到達那裡的同時,R的特定領域的設計選擇只是使其在臨時工作中更加簡單。R的巨大缺點在於,很難離開它的領域,一旦嘗試以可持續的方式實施您的發現,基本上就必須這樣做。

JBeazer
2016-10-08 03:03:38 UTC
view on stackexchange narkive permalink

如果您將R視為統計工具而不是編程語言,那確實很棒。它比Stata或SPSS具有更大的靈活性,但也可以盡其所能。我在大學期間學習了Stata,並且R很容易看,因為我已經具有統計工具的視角,而不是其他人可能具有的純編程語言經驗。

我認為,當程序員是那些試圖學習和理解R的人時,R會變得沮喪。但是對於那些通過統計學背景進入R的人來說,這是一個很好的工具。

如果您已經是一名優秀的程序員,那麼Python就是很好的選擇。但是對於剛上大學的編程和統計學初學者來說,R是一個更好的選擇。實際上,偏愛哪種才更適合您的技能和興趣。

BStange
2016-10-10 21:26:50 UTC
view on stackexchange narkive permalink

添加到一些先前的答案中

以我的經驗,沒有什麼比使用R的dplyr + tidyr,ggplot和Rmarkdown從原始數據獲取可呈現的結果更容易了。Python提供了很多功能,並且我正在越來越多地使用它,但是我肯定喜歡Hadley的軟件包結合在一起的方式。

Kodiologist
2016-10-06 20:33:16 UTC
view on stackexchange narkive permalink

如其他答案所述,Python是一種很好的通用編程語言,而R作為編程語言具有嚴重缺陷,但具有一組更豐富的數據分析庫。近年來,Python通過開發成熟的數據分析庫(例如scikit-learn)追趕R,而R永遠不會被修復。在實踐中,我幾乎所有內容都使用Python(實際上是 Hy),而對於比較深奧的方法(例如分位數回歸)(在Python的statsmodels中似乎無法實現),只使用R。從Python調用R有幾種方法。PypeR是一種非常簡單的軟件,我已經知道它可以在Windows服務器等惡劣環境中工作。

Edit:我鼓勵任何想對此進行進一步辯論的人與鏈接的文章的作者交談,而不是對此答案發表評論。

那本Rrgh指南是我曾經讀過的關於R的最無能為力的批評(而且我讀了很多)。
@Firebug笨了怎麼辦?
“文檔非常糟糕”,這是毫無頭緒的。R的強項是它對非程序員的簡單性及其龐大的文檔資料。“即使R的名字都是愚蠢的,以一種有用的方式來搜索R的東西真的很困難。對不起。歡迎使用R!”,這是毫無頭緒的。我從未遇到任何問題,無法找到最晦澀的軟件包的文檔。“您以怪異的方式將列重命名,然後分配給名稱(框架)。您知道這種方法的工作原理和原因嗎?請教育我。” c'mmon,他什至沒有嘗試。
@Firebug aRrgh批評R是一種編程語言,而不是R對非程序員的膚淺可及性。該文檔內容豐富,但我發現它通常沒有Perl或Python那樣有用。有關谷歌搜索的說法似乎是正確的;對於某些搜索,您將找到正確的東西,而對於其他搜索,則添加“統計”之類的字詞會有所幫助,但在某些情況下,您無能為力。即使很難發現“ names(df)<-...”使用了一個名為“ names <-”的函數,R用來啟用左值子例程的整個策略也是很奇怪的。
R比Google更難Google了嗎?Google很聰明。它了解到您對R語言編程語言感興趣。R語言經常被其他語言背景的人批評。抱歉,它不是這些語言的替代產品。它是為統計人員開發的。結果,某些設計決策不是最優的,但是說存在嚴重缺陷則有力。每種編程語言都有其優點和缺點。
@Roland並非如此;C有同樣的問題。考慮到多個並存的對象系統,過於復雜的作用域系統,創建軟件包的方法過於復雜,缺少從軟件包中的選擇性導入,自動矢量回收規則,不一致的情況,我認為“嚴重缺陷”並不誇張R並不是最差的編程語言,並且如果您正在編寫單行代碼或快速的小腳本,它的大多數缺點都不會給您帶來多大傷害,但是它不適用於嚴肅的編程。
創建一個包實際上很容易。僅當您遵守CRAN強制執行的規則時,情況才會變得複雜。如果創建軟件包,則可以有選擇地從軟件包中導入。向量回收實際上是一種優勢。子集列表和向量之間沒有矛盾。其餘一些確實可以視為缺陷。
-1
如果嘗試在R中反映其他編程語言技術,可能會以某種方式出現這種感覺-但這是錯誤的方法。R是為統計和數據分析而發明的:它具有自己的語法和技術,如果使用得當,它們可以完美地達到目的。更不用說在R中,對組,向量和高維對象的向量化賦值和數據集操作比其他任何語言都更快,更高效(使用`data.table`,此處的基準測試:https://github.com/Rdatatable/data.table / wiki / Benchmarks-%3A-Grouping)
R很明顯有疣,有些不可原諒的“變味”變種(stringsAsFactors)。但是它也有統計庫,沒有任何其他語言可以並行使用,甚至不能遠程使用。*創建這些庫所需的編程比我們絕大多數人所要做的更加認真。作為一個籠統的說法,“ R不是嚴肅的語言”介於無知,絕望,狹och,文盲和酸葡萄之間。我說這是希望R基本上是具有R的庫的Python的人。
@GennaroTedesco也許您應該將這些評論收集到答案中?
Gena Kukartsev
2016-10-07 04:03:54 UTC
view on stackexchange narkive permalink

Python在科學之外被廣泛採用,因此您將從中受益。正如“ R的憤怒指南”所指出的那樣,R是由一個社區開發的,該社區必須一階零軟件開發人員。

我要說的是,今天R具有兩個主要優勢:在某些領域中一些真正成熟的高度專業化的軟件包,以及最新的可複制研究軟件包knitr。

Python似乎更適合其他所有內容。

這當然是一個意見,因為該線程中的幾乎所有內容都如此。我對此線程仍然存活感到驚訝。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...