compile
位於 compiler
包(package)。 說明
這些函數為字節碼編譯器提供了接口R.
用法
cmpfun(f, options = NULL)
compile(e, env = .GlobalEnv, options = NULL, srcref = NULL)
cmpfile(infile, outfile, ascii = FALSE, env = .GlobalEnv,
verbose = FALSE, options = NULL, version = NULL)
loadcmp(file, envir = .GlobalEnv, chdir = FALSE)
disassemble(code)
enableJIT(level)
compilePKGS(enable)
getCompilerOption(name, options)
setCompilerOptions(...)
參數
f |
一個關閉。 |
options |
命名編譯器選項列表:請參閱“詳細信息”。 |
env |
編譯的頂層環境。 |
srcref |
表達式的初始源參考。 |
file,infile,outfile |
路徑名; outfile 默認為帶有 ‘.Rc' 擴展代替任何現有擴展。 |
ascii |
邏輯性;編譯後的文件應該保存為ascii格式嗎? |
verbose |
邏輯性;編譯器應該顯示正在編譯的內容嗎? |
version |
要使用的工作區格式版本。 |
envir |
評估加載表達式的環境。 |
chdir |
邏輯性;評估前更改目錄? |
code |
字節碼表達式或編譯閉包 |
e |
要編譯的表達式。 |
level |
整數;要使用的 JIT 級別( |
enable |
邏輯性;如果 |
name |
字符串;要返回的選項的名稱。 |
... |
要設置的命名編譯器選項。 |
細節
函數 cmpfun
編譯閉包的主體並返回一個具有相同形式的新閉包,並且主體被編譯後的主體表達式替換。
compile
將表達式編譯為字節碼對象;然後可以使用 eval
評估該對象。
cmpfile
解析 infile
中的表達式,編譯它們,並將編譯後的表達式寫入 outfile
。如果未提供outfile
,則它是通過替換或附加.Rc
後綴從infile
形成的。
loadcmp
用於加載編譯後的文件。它與 sys.source
類似,隻不過它的默認加載環境是全局環境而不是基礎環境。
disassemble
生成代碼的打印表示,這可能有助於提示正在發生的情況。
enableJIT
啟用或禁用just-in-time (JIT) 編譯。如果參數為 0,則禁用 JIT。如果level
是 1 則較大的閉包在首次使用之前被編譯。如果level
是2,那麽一些小閉包在第二次使用之前也會被編譯。如果level
如果是 3,則所有頂層循環在執行之前都會被編譯。 JIT 級別 3 需要編譯器選項optimize
為 2 或 3。 JIT 級別也可以通過啟動來選擇R與環境變量R_ENABLE_JIT
設置為這些值之一。調用enableJIT
如果參數為負,則返回當前的 JIT 級別。默認 JIT 級別是3
.
compilePKGS
安裝包時啟用或禁用編譯包。這要求包在將函數寫入延遲加載數據庫時進行編譯時使用延遲加載。這也可以通過啟動來啟用R與環境變量_R_COMPILE_PKGS_
設置為正整數值。不應在包安裝之外啟用此函數,因為它會導致編譯任何序列化函數,這會帶來時間和空間開銷。R_COMPILE_PKGS
相反,可以用來指示INSTALL
在安裝過程中啟用/禁用軟件包編譯。
目前編譯器會發出各種警告。它通過使用 cat
打印消息來實現此目的。最終這應該使用條件處理機製。
options
參數可用於控製編譯器操作。目前有四種選擇:optimize
,suppressAll
,suppressUndefined
, 和suppressNoSuperAssignVar
.optimize
指定優化級別,一個整數0
到3
(當前out-of-the-box默認為2
)。suppressAll
應該是標量邏輯;如果TRUE
不會顯示任何消息(這是默認設置)。suppressUndefined
可TRUE
抑製有關未定義變量的所有消息,或者它可以是不應顯示消息的變量名稱的字符向量。suppressNoSuperAssignVar
可TRUE
抑製有關對編譯時沒有可見綁定的變量進行超級賦值的消息。在編譯包的過程中,suppressAll
目前FALSE
,suppressUndefined
是TRUE
和suppressNoSuperAssignVar
是TRUE
.
getCompilerOption
返回指定選項的值。除非在 options
參數中提供了值,否則返回默認值; options
參數主要供內部使用。 setCompilerOption
設置默認選項值。要設置的選項由參數名稱標識,例如setCompilerOptions(suppressAll = TRUE, optimize = 3)
。它返回先前值的命名列表。
將編譯器稱為字節碼編譯器實際上有點用詞不當:代碼對象的外部表示當前使用 int
操作數,而當使用 gcc
編譯時,內部表示實際上是線程代碼而不是字節代碼。
例子
oldJIT <- enableJIT(0)
# a simple example
f <- function(x) x+1
fc <- cmpfun(f)
fc(2)
disassemble(fc)
# old R version of lapply
la1 <- function(X, FUN, ...) {
FUN <- match.fun(FUN)
if (!is.list(X))
X <- as.list(X)
rval <- vector("list", length(X))
for(i in seq_along(X))
rval[i] <- list(FUN(X[[i]], ...))
names(rval) <- names(X) # keep `names' !
return(rval)
}
# a small variation
la2 <- function(X, FUN, ...) {
FUN <- match.fun(FUN)
if (!is.list(X))
X <- as.list(X)
rval <- vector("list", length(X))
for(i in seq_along(X)) {
v <- FUN(X[[i]], ...)
if (is.null(v)) rval[i] <- list(v)
else rval[[i]] <- v
}
names(rval) <- names(X) # keep `names' !
return(rval)
}
# Compiled versions
la1c <- cmpfun(la1)
la2c <- cmpfun(la2)
# some timings
x <- 1:10
y <- 1:100
system.time(for (i in 1:10000) lapply(x, is.null))
system.time(for (i in 1:10000) la1(x, is.null))
system.time(for (i in 1:10000) la1c(x, is.null))
system.time(for (i in 1:10000) la2(x, is.null))
system.time(for (i in 1:10000) la2c(x, is.null))
system.time(for (i in 1:1000) lapply(y, is.null))
system.time(for (i in 1:1000) la1(y, is.null))
system.time(for (i in 1:1000) la1c(y, is.null))
system.time(for (i in 1:1000) la2(y, is.null))
system.time(for (i in 1:1000) la2c(y, is.null))
enableJIT(oldJIT)
作者
Luke Tierney
相關用法
- R findGlobals 查找閉包使用的全局函數和變量
- R SparkR count用法及代碼示例
- R SparkR column用法及代碼示例
- R SparkR columns用法及代碼示例
- R checkUsage 檢查 R 代碼是否存在可能的問題
- R SparkR corr用法及代碼示例
- R showTree R 表達式的打印 Lisp 風格表示
- R SparkR cov用法及代碼示例
- R SparkR collect用法及代碼示例
- R codetools R 低級代碼分析工具
- R SparkR coltypes用法及代碼示例
- R SparkR coalesce用法及代碼示例
- R lvq1 學習矢量量化1
- R lvq2 學習矢量量化2.1
- R summary.clara “clara”對象的摘要方法
- R diana 分裂分析聚類
- R pluton 鈈同位素成分批次
- R votes.repub 總統選舉中共和黨候選人的投票
- R agnes 凝聚嵌套(層次聚類)
- R print.mona MONA 對象的打印方法
- R print.clara CLARA 對象的打印方法
- R mona 二元變量的單論分析聚類
- R plot.diana 分裂層次聚類圖
- R plot.mona 一元分裂層次聚類的旗幟
- R bannerplot 繪圖橫幅(層次聚類)
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Byte Code Compiler。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。