2009-10-13 25 views
4

R是a functional programming language,它的主要好處之一是它能夠創建開放和透明的功能。如何查看解析的R函數的內容?

正如約翰·錢伯斯說:in his excellent book "Software for Data Analysis: Programming with R"

計算是圍繞功能,可封裝特殊的,有意義的計算結果,與可檢驗的正確性實現組織。

諸如「可再生研究」和「可靠軟件」等概念是R開發的核心。一般來說,只需輸入不帶括號的名稱就可以輕鬆檢查一個函數。例如:

> which 
function (x, arr.ind = FALSE) 
{ 
    if (!is.logical(x)) 
     stop("argument to 'which' is not logical") 
    wh <- seq_along(x)[x & !is.na(x)] 
    dl <- dim(x) 
... 

我的問題是:你怎麼例子的功能,如for()if()內容而無需下載將R源代碼?順便說一句,我明白這不會幫助查看可能從R調用的編譯代碼(如C,C++或Java)。我真的想知道是否有R函數輸出的R函數。

+0

但是但是,''for'和'if'是R語法的一部分,所以你不能僅僅檢查它們;它們是內置的。 – 2009-10-13 14:20:15

+0

(即,儘管視覺相似,它們本身不是功能。) – 2009-10-13 14:21:16

+0

我明白了!他們不是功能。這解釋了它。它們更像功能「功能」或其他符號,如< - 或[;它們只是語法的一部分。如果你把答案放在答案中,我會接受它。 – Shane 2009-10-13 14:31:48

回答

5

俗話說得好:使用來源盧克!

R函數可能在提示符下可見,但仍然被解析,意味着註釋被剝離,代碼縮進被改變等等。所以我總是會去源碼。

2

我也喜歡去源德克提到的同樣的理由,但對於快速和骯髒的工作,我也是靠的子集:

getAnywhere(), getFromNameSpace(), THEPACKAGE:::thefn, getGeneric()

,看看哪些沒有被導出的函數他們的包的名字空間。