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


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。