在r-studio中輸入 >plyr::arrange可檢視如下arrange函式原始碼
function
(df,
...)
unrowname(df[ord,
, drop =
false])
}# #
首先關注函式的引數部分
function
(df,
...)
形參df 待傳入r語言的dataframe資料;「…」則為待解析的引數列表。
進入函式體,首先第一行為:
stopifnot(is.data.frame(df)
)
用於判斷傳入的實參是否為dataframe,否則stop。
第二行是該函式的核心:
ord <- eval(substitute(order(
...)
), df, parent.frame(
))
order()函式輸入數值型列表(list),返回list中元素由低到高的序號,比如:
> order(mtcars$mpg)
>[1
]151624717
3114
2322
2912[12
]13116
510253012
432[23
]2139
8272619
2818
20
substitute()和eval()涉及元程式設計的概念(metaprogramming),即將語句作為輸入,生成新的**,實現需要的功能。
在r語言中substitute()可將…部分的內容進行解析,解析的環境為df(即輸入的資料框)。eval()執行解析得到的函式。函式體中第二行即執行取df中的某些列,對這些列執行order(),並將返回的序號儲存在ord變數中。
函式體的最後一行即返回按某些列排序後的資料框。
最後,該段**較易理解,最大的困難是對於r語言元程式設計的理解。後續將在部落格中對r語言/lisp語言中的元程式設計概念進行總結,歡迎後續關注。
spring原始碼分析 spring原始碼分析
1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...
R語言 3 0 1 原始碼已經提交到 Github
r語言最新的 3.0.1 版本原始碼已經提交到 github 上,位址是 r語言是主要用於統計分析 繪圖的語言和操作環境。r本來是由來自紐西蘭奧克蘭大學的ross ihaka和robert gentleman 開發。也因此稱為r 現在由 r開發核心團隊 負責開發。r是基於s語言的乙個gnu專案,所以...
思科VPP原始碼分析(dpo機制原始碼分析)
vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...