當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R deparseOpts 表達式解析選項


R語言 deparseOpts 位於 base 包(package)。

說明

處理 deparsedputdump 的解析選項。

用法

.deparseOpts(control)

..deparseOpts

參數

control

解析選項的特征向量。

細節

..deparseOpts.deparseOpts() 使用的可能解析選項的 character 向量。

.deparseOpts()deparsedputdump 調用來處理它們的 control 參數。

control 參數是一個向量,包含零個或多個以下字符串(正是 ..deparseOpts 中的字符串)。使用部分字符串匹配。

"keepInteger"

as.integer() 包圍整數向量或使用後綴 L ,這樣它們在解析時不會轉換為 double 類型。這包括確保保留整數NA(如果向量中沒有非NA值,則通過NA_integer_,除非設置了"S_compatible")。

"quoteExpressions"

quote() 包圍未計算的表達式,但不包括 formula ,因此重新解析時不會計算它們。

"showAttributes"

如果對象具有 attributes(source 屬性除外,請參閱 srcref ),請使用 structure() 顯示它們以及對象值,除非唯一的此類屬性是 names"niceNames" 選項已設置。此 ( "showAttributes" ) 是 deparsedput 的默認值。

"useSource"

如果對象具有 source 屬性 ( srcref ),則顯示該屬性而不是解析該對象。目前僅適用於函數定義。

"warnIncomplete"

一些外來對象(例如environment、外部指針等)無法正確解析。如果解析器識別出其中一種情況,此選項會發出警告。

另外,解析器在R< 2.7.0 隻接受最多 8192 字節的字符串,並且此選項會針對較長的字符串發出警告。

"keepNA"

整數、實數和字符NA必要時,s 被強製函數包圍,以確保它們被解析為相同的類型。因為例如NA_real_可以輸出在R,這主要用於連接S_compatible.

"niceNames"

如果為 true,則 list 和具有非 NA 名稱的原子向量(請參閱 names )將被解析為 c(A = 1) 而不是 structure(1, names = "A") ,與 "showAttributes" 設置無關。

"all"

指定上麵列出的所有選項加上 "digits17" 的縮寫方式。這是 dump 的默認選項,如果沒有 "digits17" ,則為 edit 使用的選項(已修複)。

"delayPromises"

以 <promise: expression> 的形式解析 Promise,而不是評估它們。 Promise 的值和環境將不會顯示,並且無法獲取解析後的代碼。

"S_compatible"

使deparsing盡可能兼容S和R< 2.5.0。為了與 S 兼容,雙精度向量的整數值用尾隨小數點進行解析。不使用反引號。

"hexNumeric"

實數和有限複數在‘中輸出⁠"%a"⁠’ 格式為二進製分數(編碼為十六進製:參見sprintf)以最大的機會進行完全精確的記錄。輸出具有一個或兩個非有限分量的複數,就像未設置此選項一樣。

(這依賴於正確支持該格式:Windows 上的已知問題已從R3.1.2.)

"digits17"

使用格式‘輸出實數和有限複數⁠"%.17g"⁠’這可能會比默認值提供更高的精度(但輸出將取決於平台,並且讀回時可能會損失精度)。輸出具有一個或兩個非有限分量的複數,就像未設置此選項一樣。

"exact"

指定 control = c("all", "hexNumeric") 的縮寫方法,保證數字準確,另請參見下文。

對於最易讀(但可能不完整)的顯示,請使用 control = NULL 。這顯示對象的值,但不顯示其屬性。 deparse 中的默認設置也是顯示屬性,但不使用任何其他選項來使結果可解析。 ( dump 通過 control = "all" 使用更多默認選項,並且打印沒有源的函數使用 c("keepInteger", "keepNA") ,可以在其中添加 "warnIncomplete" 。)

使用 control = "exact" (control = c("all", "hexNumeric") 的縮寫)最接近於使 deparse() 成為 parse() 的逆(但我們還沒有看到 "all" (現在包括 "digits17" )的示例)不會那麽好)。然而,即使使用這些選項,也不是所有對象都是deparse-able,如果函數識別出它被要求做不可能的事情,就會發出警告。

隻能指定"hexNumeric""digits17" 之一。

與所選 control 選項相對應的整數值。

例子

stopifnot(.deparseOpts("exact") == .deparseOpts(c("all", "hexNumeric")))
(iOpt.all <- .deparseOpts("all")) # a four digit integer

## one integer --> vector binary bits
int2bits <- function(x, base = 2L,
                     ndigits = 1 + floor(1e-9 + log(max(x,1), base))) {
    r <- numeric(ndigits)
    for (i in ndigits:1) {
        r[i] <- x%%base
        if (i > 1L)
            x <- x%/%base
    }
    rev(r) # smallest bit at left
}
int2bits(iOpt.all)
## What options does  "all" contain ? =========
(depO.indiv <- setdiff(..deparseOpts, c("all", "exact")))
(oa <- depO.indiv[int2bits(iOpt.all) == 1])# 8 strings
stopifnot(identical(iOpt.all, .deparseOpts(oa)))

## ditto for "exact" instead of "all":
(iOpt.X <- .deparseOpts("exact"))
data.frame(opts = depO.indiv,
           all  = int2bits(iOpt.all),
           exact= int2bits(iOpt.X))
(oX <- depO.indiv[int2bits(iOpt.X) == 1]) # 8 strings, too
diffXall <- oa != oX
stopifnot(identical(iOpt.X, .deparseOpts(oX)),
          identical(oX[diffXall], "hexNumeric"),
          identical(oa[diffXall], "digits17"))

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Options for Expression Deparsing。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。