時隔9年,R語言正式告別2.0時代,跨入3.0紀元

jopen 11年前發布 | 7K 次閱讀 R語言

R 3.0.0 (代號 “Masked Marvel”)已經釋出,R 正式進入了 3.x 時代。

R 3.0.0 帶來了約 100 項的新特性,長向量的全面支持和若干項性能提升。長向量(Long Vectors)理論上至多可存儲 2^52 個元素,已經遠超 CPU 和操作系統地址空間限制。更多說明和代碼遷移注意事項可以參考 ?LongVectors . 考慮到向量在 R 中的基礎地位,這將給未來 R 對更大規模數據的支撐鋪平道路。

另一項值得注意的重要變化是,程序包的 vignette 編譯目前已經向 Sweave 以外的引擎開放,即正式引入了 knitr 支持!詳情可參看最新版本的 Writing R Extensions 以及 tools::vignetteEngine 。

考慮到長向量特性比較重要,完整翻譯了官方公告中的兩個重點章節:

用戶可見的顯著變動:

  • 對于此版本的 R (3.0.0),所有包都需要重新安裝。
  • 對長度為 2^31 以上向量的全面支持(僅限 64-bit 系統,32-bit 系統將會報錯)
  • 64-bit 版本的 R 可分配內存的大小僅受系統的限制。可通過系統工具(如 bash shell 下的 ulimit )來設置單個 R 進程的整體內存占用,尤其是在多用戶環境下。有若干包需要 4GB 以上的虛擬內存來加載。
  • 64-bit Windows 版本的 R 可用內存大小默認限制為已安裝內存的大小。該值可通過啟動參數 --max-mem-size 或環境變量 R_MAX_MEM_SIZE 設置。
  • 使用負數表示顏色值的方式已被全面廢棄,統一拋出錯誤。


長向量支持:

以下內容僅適用于 64-bit 系統:

  • 全面支持多于 2^31 - 1 個元素的向量。適用于原始型、邏輯型、整數型、雙精度型、復數型和字符型向量,對列表同理(列表是特殊的向量)。(字符向量的每一元素大小限制仍為 2^31 - 1 bytes)
  • 對向量的多數操作可無縫應用于長向量,對于尚不支持的操作,可能會返回錯誤 'long vectors not supported yet' 多數是因為它們明確依賴于整數型下標(如 anyDuplicated() 和 match() )或是因為超過了其他的限制(如字符串或矩陣的維度)或相應的操作速度可能會極其緩慢。
  • 對長向量使用 length() 將返回一個雙精度值,且長度屬性可以通過使用一個雙精度值和賦值語句設置為 2^31 或更多。
  • 下標索引的多數功能都可正常使用。總的來說,雙精度值下標可用于訪問超出 2^31 -1 的元素。
  • 目前對于每維少于 2^31 個元素而總元素個數大于此值的矩陣和數組已經有部分支持。僅有某些矩陣代數的操作支持這樣的矩陣,而且通常會花費很長時間。對于其余操作,尚不支持的原因可能是底層的 Fortran 代碼有著某種未被聲明的限制(如已在復數型 svd() 中發現的那樣)。
  • dist() 可計算得到大于 65536 行的距離對象 (但是像 hclust() 一樣的函數尚不能處理這樣的對象)。
  • 對原始型向量進行 serialize() 不受向量大小的限制(除了受硬件資源所限)。
  • C 函數 R_alloc 現在可以分配 2^35 bytes 或更多內存。
  • agrep() 和 grep() 將針對輸入的長向量返回雙精度型的下標。
  • 為了支持長向量,許多 .C() 調用都被替換為 .Call() 調用(已經替換或將替換)。遺憾的是有若干包復制了非正式 API 的 .C() 調用,因此會編譯失敗。
  • .C() 和 .Fortran() 尚不支持長向量的輸入。這是一個預警機制,因為現有代碼基本不太可能是可以處理長向量的實現(同時 R 的封裝也通常假設 length(x) 是一個整數)。
  • sort() 中的多數方法都已支持長向量。
  • rank(), sort.list() 和 order() 已支持長向量 (除了 radix sorting 會比較緩慢)。
  • sample() 可對長向量做均勻抽樣。

 

發布公告
https://stat.ethz.ch/pipermail/r-help/2013-April/350751.html

下載地址(源碼包)
http://cran.r-project.org/src/base/R-3/R-3.0.0.tar.gz

來自: http://cos.name/cn/topic/109895

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!