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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。