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


R getParseData 从对象获取详细的解析信息


R语言 getParseData 位于 utils 包(package)。

说明

如果"keep.source"选项是TRUE,R的解析器将附加其解析的对象的详细信息。这些函数检索该信息。

用法

getParseData(x, includeText = NA)
getParseText(parseData, id)

参数

x

parse 返回的表达式,或者具有源引用信息的函数或其他对象

includeText

逻辑性;是否在结果中包含已解析项目的文本

parseData

getParseData 返回的数据帧

id

要检索其文本的项目标识符向量

细节

在 3.0.0 版本中,R解析器被修改为包含 Romain Francois 在他的文章中编写的代码parser包。这将构建有关解析代码中每个标记和更高级别构造的详细信息表。该表存储在srcfile与解析代码中的源引用相关联的记录,并由getParseData函数。

为了getParseData
如果解析数据不存在,NULL。否则返回一个 DataFrame ,包含以下列:

line1

整数。项目开始的行号。这是 getSrcLocation 中名为 "parse" 的解析行号,它忽略 ⁠#line⁠ 指令。

col1

整数。项目开始的列号。第一个字符是第 1 列。这对应于 getSrcLocation 中的 "column"

line2

整数。项目结束的行号。

col2

整数。项目结束处的列号。

id

整数。与该项目关联的标识符。

parent

整数。该项目的父项的id

token

字符串。令牌的类型。

terminal

合乎逻辑的。标记是否是“terminal”,即解析树中的叶子。

text

字符串。如果 includeTextTRUE ,则所有标记的文本;如果是NA(默认值),则为终端标记的文本。如果 includeText == FALSE ,则不包括此列。非常长的字符串(源为1000个字符或更多)将不会被存储;相反,将包含一条给出其长度和分隔符的消息。

DataFrame 的行名称将等于 id 值,并且 DataFrame 将具有 "srcfile" 属性,其中包含所使用的 srcfile 记录。这些行将按源文件中的起始位置排序,父项出现在其子项之前。

为了getParseText
长度相同的字符向量id包含关联的文本项。如果它们不包含在parseData,将从原始文件中检索它们。

注意

getParseData 返回的结果与原始 parser 代码返回的结果存在许多差异:

  • 保留的列较少。

  • 不返回内部令牌编号。

  • col1 从 1 开始计数,而不是从 0 开始计数。

  • id 值不会附加到解析树的元素,它们仅保留在 getParseData 返回的表中。

  • ⁠#line⁠ 指令被识别,但其他注释标记(例如, roxygen 注释)未被识别。

按设计解析数据探索解析器实现的细节,这些细节如有更改,恕不另行通知。对解析数据进行计算的应用程序可能需要每个 R 版本的更新。

例子

fn <- function(x) {
  x + 1 # A comment, kept as part of the source
}

d <- getParseData(fn)
if (!is.null(d)) {
  plus <- which(d$token == "'+'")
  sum <- d$parent[plus]
  print(d[as.character(sum),])
  print(getParseText(d, sum))
}

作者

Duncan Murdoch

参考

Romain Francois (2012). parser: Detailed R source code parser. R package version 0.0-16. https://github.com/halpo/parser.

也可以看看

parse , srcref

相关用法


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