R 迴圈 List, Vector 記憶體預分配的考量

在 PTT R_Language 版有一篇 2015 年的文章「[心得] 預分配記憶體的差異」,比較了 R 迴圈時 List 變數是否預分配記憶體的計算速度差異。作者使用的 R 版本是 Revolution R Open 3.2.0,結論是速度相差 60 倍。但最近幾年 R 改版幅度變化很大,國外有一些新的說法出現,認為 List 變數的記憶體本來就不是連續配置,所以在每個迴圈中逐次增加 List 變數元素,在計算速度的影響不大。

以下是我把該文測試 R 程式用幾個較新 R 版本測試的結果

(繼續閱讀…)


 

關於「R軟體:應用統計方法」時間數列程式錯誤

我這幾天正在修改我那本「R軟體:應用統計方法」的書

由於當初出書時的 R 版本是 2.10.1,目前已經是 3.4.4,某些 packages 已經消失在 CRAN,但最大的差異是在時間數列那一章,由於 R 軟體核心的 arima 函數有部分改寫,導致有用到 TSA 套件的「轉換函數模式」與「介入事件模型」的某些程式會出錯。這裡提供讀者們一個應急的解決方法。
(繼續閱讀…)


 

R軟體 svSocket Server + PHP Socket Client

R 軟體中有一個 svSocket 套件可以讓 R 成為 Socket Server,其優點是啟動 Server 後轉為背後執行,R 軟體可以繼續作其他事情,但目前僅找得到 R 與 tcl 相對於 svSocket 的 Client 程式範例。以下是我用 PHP 當作 Socket Client 連接後端 R svSocket Server 的測試結果。

(繼續閱讀…)


 

R: tryCatch 簡單範例

R 軟體用於實務分析時,經常需要搭配定期自動執行軟體,以 Batch mode 方式在背景執行,但若 R 程式中某些地方發生錯誤,整個 R 程式往往就會停在出錯的地方,對於大型應用程式而言會造成很多困擾。此時,R 軟體的 tryCatch 函數可以協助偵測並解決 R 程式遇到錯誤時被強迫終止的問題,可讓出錯程式碼下方其他的程式繼續執行。

網路上關於 tryCatch 函數的例子通常都寫得很囉唆、語焉不詳,所以我在這裡提供幾個簡單的應用範例。

(繼續閱讀…)


 

為什麼我們看不懂別人寫的 R 程式?

外界在提到 R 軟體時,在褒獎之餘,總是人云亦云地會順便提到「R 軟體的學習曲線頗陡峭」。我思考了幾個可能原因,想到以前我在學 Perl 程式語言的經驗。當時我買了好幾本 Perl 的書,但後來放棄的原因,是我看到網路上有經驗的人寫的 Perl 程式時,經常會在書上找不到他們用的特殊奇怪語法,這讓我非常氣餒。

關於「R 很難學」的迷思,可能的原因之一,或許就是這種「初學者看不懂程式」的挫折使然。所以這裡我列出一些 R 軟體有別於其他程式語言的常見特殊寫法,或許能幫忙一些初學者度過第一關。

(繼續閱讀…)