Re: [問題] 如何看R的程式碼
※ 引述《Tamih (.....)》之銘言:
: ※ 引述《KirinGuess (Kirin)》之銘言:
: : 請問在使用R時,怎樣才能看到各種功能的程式碼。
: : 我有找到到3種方法:
: : 1. 在功能名之前加「stat.」 ,例如:stat.anova
: 這個說法錯誤~!
: stat.anova 跟 anova 這兩個函數是不同作用的~!
: 你可以看看他們的說明或者函數內所使用的引數...
: : 2. 在功能名之後加「.default」,例如:qqnorm.default
: 這是當函數有多個方法的時候,
: 函數設計者為不同方法所取的函數名字,
: 但不一定每個多方法的函數都有這 .default 的用法。
: 關於什麼是「方法」見我下面所述...
: : 3. 直接輸入功能名 ,例如:cor
: 當直接輸入函數能取得函數內容時,表示其函數只有一種方法。
: R 裡面所謂的方法類似物件導向的觀念,
: 函數會針對他所處理的物件型態,去找真正用的函數,
: 例如 plot 這函數,我們知道他可以畫 x, y 的散佈圖,
: 其實他是使用了 plot.default 這支函數在畫圖,而 plot 還有很多不同方法,
: 可以使用 methods 這函數來查詢該函數有哪些方法,
: 就像 plot 的話:
: > methods(plot)
: [1] plot.acf* plot.data.frame* plot.Date*
: [4] plot.decomposed.ts* plot.default plot.dendrogram*
: [7] plot.density plot.ecdf plot.factor*
: [10] plot.formula* plot.hclust* plot.histogram*
: [13] plot.HoltWinters* plot.isoreg* plot.lm
: [16] plot.medpolish* plot.mlm plot.POSIXct*
: [19] plot.POSIXlt* plot.ppr* plot.prcomp*
: [22] plot.princomp* plot.profile.nls* plot.spec
: [25] plot.spec.coherency plot.spec.phase plot.stepfun
: [28] plot.stl* plot.table* plot.ts
: [31] plot.tskernel* plot.TukeyHSD
: 就有上述 32 種方法,
: 譬如 plot.lm 就是當你 plot 這支函數裡面放的是 lm 所建立出來的物件時,
: 所會用到的真實函數... 等等各種方法亦是如此,
: 只是使用 plot 這函數,可以省略後面,
: 他會直接針對物件型態尋找正確的真實函數來使用。
: 所以只要你利用 method 這函數找到真實的函數名字(後接 * 無法顯示),
: 直接打他名字就能顯示出他函數的程式原貌~!
: 如我有錯,請各位糾正~!
下面只針對原文第三個問題回答如何找到 "cor.test" 的 code.
上面的 * 號均為 non-visible function, 在 R 中可能無法直接檢視
(至少我不知道有何方法可行, 不代表沒有, 有人知道的話請告訴我, 謝謝).
其中 cor.test() 即屬於此類, 用 methods(cor.test) 即可得知.
原文中的回文說它被包在 dll 中亦非正解.
> cor.test
function (x, ...)
UseMethod("cor.test")
<environment: namespace:stats>
用 UseMethod() 的, 均有 R code, 然後才在其中使用外部呼叫, 也就是包在
.dll (MS) 或 .so (Linux) 檔中. 事實上這些函式均使用 class, 所以大部
份 (非全部) 都有一個 .default 的內定函式.
那哪些是直接被使用外部呼叫的呢? 使用 .Internal 或 .Primitive 的函式才是.
如 runif(), sqrt() 這些都直接包在 R 的核心, 如 R.dll, Rmath.dll 中.
自己寫的則直接用 dyn.load().
回到正文, cor.test() 被放在 stats 這個內定的 package 中, 所以可以在
source code 中找到, 下載原始碼, 把它解壓縮, 找到這個檔
src\library\stats\R\cor.test.R
在裡頭就有詳細的原始碼了, 包含了整個 cor.test 家族.
另外,
src\library\stats
放著整個 stats package 的原始檔, 相對應安裝在 library\stats 下
src\library\stats\R
放著所有的 stats package 的 R code, 相對應安裝在 library\stats\R 下.
src\library\stats\src
放的所有的 stats package 的 C/Fortran code 也就是外部呼叫的部份, 相對應
安裝在 library\stats\libs 下.
至於上面 plot 的函式同理可行.
Reference:
Venables, W.N. and Ripley, B.D. (2000) "S Programming", Springer-Verlag
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 192.188.163.55
※ 編輯: clickhere 來自: 192.188.163.55 (01/06 01:30)
推
01/06 03:19, , 1F
01/06 03:19, 1F
討論串 (同標題文章)