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


R parse 解析 R 表达式


R语言 parse 位于 base 包(package)。

说明

parse() 返回 expressioncall 的 “list” 中已解析但未计算的表达式。

str2expression(s)str2lang(s)返回parse(text=s, keep.source=FALSE)的特殊版本,因此可以被视为将字符串s转换为表达式、调用等。

用法

parse(file = "", n = NULL, text = NULL, prompt = "?",
      keep.source = getOption("keep.source"), srcfile,
      encoding = "unknown")

str2lang(s)
str2expression(text)

参数

file

connection ,或给出要从中读取表达式的文件名或 URL 的字符串。如果file"" 并且text 缺失或NULL,则从控制台获取输入。

n

整数(或强制为整数)。要解析的最大表达式数。如果nNULL 或负数或NA,则将完整解析输入。

text

字符向量。要解析的文本。元素被视为文件的行。其他R如果可能的话,对象将被强制为字符。

prompt

从键盘解析时打印的提示。NULL意味着使用R的提示,getOption("prompt").

keep.source

逻辑值;如果TRUE,保留源参考信息。

srcfile

NULL 、字符向量或 srcfile 对象。请参阅“详细信息”部分。

encoding

输入字符串采用的编码。如果值为 "latin1""UTF-8",则用于将字符串标记为已知的 Latin-1 或 UTF-8:它不用于重新编码输入。要执行后者,请将编码指定为连接 con 的一部分或通过 options(encoding=) :请参阅 file 下的示例。在 MBCS 区域设置中运行时,参数 encoding = "latin1"encoding = "UTF-8" 将被忽略并出现警告。

s

长度为 1character 向量,即 “string”。

细节

parse(....)

如果 text 的长度大于零(强制后),则优先使用 file

所有版本的R接受来自连接的输入,行尾标记为 LF(在 Unix 上使用)、CRLF(在 DOS/Windows 上使用)或 CR(在经典 Mac OS 上使用)。最后一行可能不完整,即缺少最终的 EOL 标记。

当从控制台获取输入时, n = NULL 相当于 n = 1 ,并且 n < 0 将读取直到读取到 EOF 字符。 (对于 Windows front-ends,EOF 字符为 Ctrl-Z。)从控制台读取时,line-length 限制为 4095 字节(这可能会施加下限:请参阅“R 简介”)。

srcfile 的默认设置如下。如果 keep.source 不是 TRUE ,则 srcfile 默认为字符串,可以是 "<text>" 或从 file 派生的字符串。当 keep.sourceTRUE 时,如果使用 text,则 srcfile 将被设置为包含文本的 srcfilecopy。如果 file 使用字符串,则将使用引用该文件的 srcfile 对象。

srcfile是字符串时,错误消息将包含名称,但源参考信息不会添加到结果中。当srcfilesrcfile对象时,将保留源引用信息。

str2expression(s)

对于 character 向量 sstr2expression(s) 对应于 parse(text = s, keep.source=FALSE) ,其类型始终为 ( typeof ) 和 class expression

str2lang(s)

对于 character 字符串 sstr2lang(s) 对应于 parse(text = s, keep.source=FALSE)[[1]] (加上检查 sparse(*) 结果的长度均为 1),通常是 call 但也可以是symbol 又名 nameNULL 或原子常量,例如 21LTRUE 。换句话说,str2lang(.) 的值是一个调用或其一部分,简而言之“一个调用或更简单”。

目前,str2lang()str2expression() 中不处理编码。

parse()str2expression() 返回 "expression" 类型的对象,如果指定为非负整数,则 parse() 最多包含 n 元素。

str2lang(s)s 一个字符串,返回“a call 或更简单”,请参阅“详细信息:”部分。

srcfile 不是 NULL 时,"srcref" 属性将附加到包含与每个元素对应的 srcref 记录列表的结果,将附加 "srcfile" 属性,其中包含 srcfile 的副本,并且将附加一个 "wholeSrcref" 属性,其中包含与所有已解析文本相对应的 srcref 记录。详细的解析信息将存储在 "srcfile" 属性中,由 getParseData 检索。

语法错误(包括不完整的表达式)将引发错误。

如果 encoding"latin1""UTF-8" ,或者 text 与 Latin-1 或 UTF-8 语言环境中已知编码的每个元素一起提供,结果中的字符串将具有声明的编码。

部分解析

当解析期间发生语法错误时,parse 会发出错误信号。如果它是 srcfile 对象并且 text 参数用于提供文本,则部分解析数据将存储在 srcfile 参数中。在其他情况下,当错误被触发时它会丢失。

可以使用应用于 srcfile 对象的 getParseData 来检索部分解析数据。由于解析不完整,因此通常会包含对不存在的 "parent" 条目的引用。

注意

使用 parse(text = *, ..) 或其简化且更高效的版本 str2lang()str2expression() 的效率至少比 call(..)as.call() 低一个数量级。

例子

fil <- tempfile(fileext = ".Rdmped")
cat("x <- c(1, 4)\n  x ^ 3 -10 ; outer(1:7, 5:9)\n", file = fil)
# parse 3 statements from our temp file
parse(file = fil, n = 3)
unlink(fil)

## str2lang(<string>)  || str2expression(<character>) :
stopifnot(exprs = {
  identical( str2lang("x[3] <- 1+4"), quote(x[3] <- 1+4))
  identical( str2lang("log(y)"),      quote(log(y)) )
  identical( str2lang("abc"   ),      quote(abc) -> qa)
  is.symbol(qa) & !is.call(qa)           # a symbol/name, not a call
  identical( str2lang("1.375" ), 1.375)  # just a number, not a call
  identical( str2expression(c("# a comment", "", "42")), expression(42) )
})

# A partial parse with a syntax error
txt <- "
x <- 1
an error
"
sf <- srcfile("txt")
tryCatch(parse(text = txt, srcfile = sf), error = function(e) "Syntax error.")
getParseData(sf)

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

Murdoch, D. (2010). “Source References”. The R Journal, 2(2), 16-19. doi:10.32614/RJ-2010-010.

也可以看看

scansourceevaldeparse

源参考信息可用于调试(例如,参见setBreakpoint)和分析(参见Rprof)。可以通过getSrcref及相关函数进行检查。更详细的信息可通过 getParseData 获得。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Parse R Expressions。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。