当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。