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