2013-12-16 28 views
2

我不知道,如果這是提出主觀問題的正確位置,而且我對R相當陌生,但是我現在非常困惑。我正在通過R語言參考和通過運行typeof(is.na)typeof(mean)發現兩個對象,它們分別在R提示符上返回「內建」和「關閉」。我不知道這是什麼意思,我搜索後去了這個網站,http://www.r-bloggers.com/closures-in-r-a-useful-abstraction/,但無法理解,任何人都可以幫助我通過一些外行人的理解來理解「關閉」和「內建」嗎?R中的內置物和閉合物

回答

4

help("closure")

這種類型的功能是不R中的唯一類型:它們被稱爲 閉包(將名稱與在LISP起點)到從 原始函數區分它們。

help("Primitive")

一個「原始」(內部實現)的功能。

「內部實現」對於「內建」來說只是一個不同的術語。

兩者(封閉和基本類型)是R.原語功能的功能在C被實施,在R.

+1

這是否意味着 - 一個封閉的,使用R語法編寫的R中,而內置的是用C編程語言? – PKumar

+1

這是我的理解。但是,閉包也可以調用C代碼。例如,如果你看一下'mean.default'的代碼,你會發現最後調用'.Internal(mean(x))'。 – Roland

+0

感謝您的洞察力 – PKumar

1

功能clousures,或簡單功能的閉合,由三個基本部分組成:甲醛,主體和環境。

的環境,或更好的封閉環境中,一個功能是關閉在其中創建函數和函數千萬記住它的環境...

> typeof(mean) 
[1] "closure" 
> environment(mean) 
<environment: namespace:base> 
> environment(function(x){x+1}) 
<environment: R_GlobalEnv> 

基元,如相反,不具有環境:

> typeof(sum)   
[1] "builtin" 
> environment(sum) 
NULL 

在實踐中,閉包和基元在參數傳遞給內部函數的方式上有所不同。

如果我們想檢查功能是關閉或原始的,我們可以使用:

> is.primitive(sum)   
[1] TRUE 
> is.primitive(mean) 
[1] FALSE 
+0

感謝您的見解 – PKumar