trace函數: 修改既有的R function內容

今天為了追一個安裝套件的bug,我需要追蹤tools:::.install_packages這個程式碼在if (test_load) {以後的行為。 在追蹤R語言函數的行為時,我常用的是在原始碼中插入browser()與debug(tools:::.install_packages)兩種方法。trace函式我一直不太懂。有興趣的讀者可以在查閱我過去寫的:R的除錯功能 在追tools:::.install_packages這個函數時,一來我懶的去研究如何修改tools這個內建套件的函數原始碼,二來這個函數很複雜,如果用debug需要瘋狂的next step... trace這個函數,是用來編輯已經存在的R函數。 »

itertools的效能

看到許多版友在問itertools的效能,讓我想跟大家分享一些關於程式效能的經驗。 一般來說,我們不會去優化所有的程式碼,因為優化有很大的代價:一般性與可讀性。 通常跑得快與寫的快,是要做取捨的。 這裡的例子很好想像,大家只要比較R的程式碼與Rcpp的程式碼就好了。 又由於程式的效能通常也符合80-20法則: 80%的時間是花在20%的程式碼 所以實務上,我不會從頭到尾都把程式用Rcpp來寫, 而是只抽出最花時間的那段程式碼,改成Rcpp。 以一個for loop來說: library(microbenchmark) library(itertools) ## Loading required »

itertools 簡介

最近在ptt R_Language版上看到許多跟迴圈有關的文章,所以一時興起想跟大家分享寫迴圈或apply等函數好用的套件:itertools library(itertools) ## Loading required package: iterators 講itertools之前,要先介紹iterator的概念:這是把迴圈的功能更精鍊出來的概念。 我們先看一個迴圈的範例: for(i in 1:3) { print(i) } ## [1] 1 ## [1] 2 »

機器學習系統需要的資料格式

之前我分享了對於一般線上系統與分析系統對於資料的不同需求,並且針對他們不同的需求,提出我個人認為,在工程資源有限時比較好的選擇。接下來我想拿機器學習系統的需求與線上系統、分析系統做比較。以廣告系統為例,一個常見的機器學習系統,就是對每一個bid request後面代表的事件預測使用者點擊廣告的機率。 就我所知,機器學習系統可以分成兩種作法。一般的作法會把整套系統分成兩塊:線上預測與線下學習。通常我們會先累計「可以學習」的資料,在線下透過各種方法讓機器學出一個模型。接下來再把模型放到線上系統,即時的對每一個事件做預測。另外一種作法,則是讓機器學習系統在收到事件後,做預測的同時,即時更新模型。兩者最主要的差異,就是前者是將預測與學習做分割, »

資料分析所採用的資料格式

數據分析已經是一個悠久的需求,也因此對於數據分析所需的需求,其實也有很多解法了。分析可以分成已知需求的分析與未知需求的分析。前者常常被分類到BI的範疇,而後者則是被歸類為分析的範疇。 若已知分析面向,我們可以在系統處理事物性需求時,做出即時的統計數據。舉例來說,在做RTB時,只要在每次收到win notice時將需要支付的金額更新到如redis的資料庫中,就可以了解最新的已花費金額。這樣的查詢,可以花費很少的力氣做到即時數據與即時的Dashboard。 但這種做法的缺點,是在規劃時,就限制了分析能查看的面向。若我們只累計金額,就只能查詢已花費的總金額。要查詢個別campaign花費的金額時,就只能回去爬log。如果我們儲存金額時,額外放入campaign的資訊,那無論是總金額或是各別campaign的金額, »