parse 位於 base 包(package)。 說明
parse() 返回 expression 和 call 的 “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 的字符串。如果 | 
| n | 整數(或強製為整數)。要解析的最大表達式數。如果 | 
| text | 字符向量。要解析的文本。元素被視為文件的行。其他R如果可能的話,對象將被強製為字符。 | 
| prompt | 從鍵盤解析時打印的提示。 | 
| keep.source | 邏輯值;如果 | 
| srcfile | 
 | 
| encoding | 輸入字符串采用的編碼。如果值為  | 
| s | 長度為  | 
細節
- 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.source為TRUE時,如果使用text,則srcfile將被設置為包含文本的srcfilecopy。如果file使用字符串,則將使用引用該文件的srcfile對象。當 srcfile是字符串時,錯誤消息將包含名稱,但源參考信息不會添加到結果中。當srcfile是srcfile對象時,將保留源引用信息。
- str2expression(s):
- 
對於 character向量s,str2expression(s)對應於parse(text = s, keep.source=FALSE),其類型始終為 (typeof) 和classexpression。
- str2lang(s):
- 
對於 character字符串s,str2lang(s)對應於parse(text = s, keep.source=FALSE)[[1]](加上檢查s和parse(*)結果的長度均為 1),通常是call但也可以是symbol又名name、NULL或原子常量,例如2、1L或TRUE。換句話說,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.
也可以看看
源參考信息可用於調試(例如,參見setBreakpoint)和分析(參見Rprof)。可以通過getSrcref及相關函數進行檢查。更詳細的信息可通過 getParseData 獲得。
相關用法
- R paste 連接字符串
- R path.expand 展開文件路徑
- R pushBack 將文本推回連接
- R plot 通用 X-Y 繪圖
- R prod 向量元素的乘積
- R print 打印值
- R print.default 默認打印
- R pipeOp 前向管道操作符
- R polyroot 求實數或複數多項式的零點
- R pos.to.env 將搜索路徑中的位置轉換為環境
- R pmatch 部分字符串匹配
- R print.data.frame 打印 DataFrame
- R proc.time R的運行時間
- R prmatrix 打印矩陣,舊式
- R proportions 將表條目表示為邊表的分數
- R pcre_config PCRE 的報告配置選項
- R pretty 漂亮的斷點
- R file.path 構造文件路徑
- R grep 模式匹配和替換
- R getwd 獲取或設置工作目錄
- R vector 向量 - 創建、強製等
- R lapply 對列表或向量應用函數
- R dump R 對象的文本表示
- R Sys.getenv 獲取環境變量
- R rank 樣本排名
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Parse R Expressions。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
