substitute
位于 base
包(package)。 说明
substitute
返回(未计算的)表达式 expr
的解析树,替换 env
中绑定的任何变量。
quote
只是返回其参数。该参数不进行求值,可以是任何 R 表达式。
enquote
是一个简单的 one-line 实用程序,它将 Foo(....)
形式的调用转换为 quote(Foo(....))
形式的调用。这通常用于保护 call
免受早期评估。
用法
substitute(expr, env)
quote(expr)
enquote(cl)
参数
expr |
任何语法上有效的R表达式 |
cl |
|
env |
环境或列表对象。默认为当前评估环境。 |
细节
substitute
的典型用途是为数据集和绘图创建信息标签。下面的 myplot
示例展示了此函数的简单用法。它使用函数 deparse
和 substitute
为绘图创建标签,这些标签是函数 myplot
的实际参数的字符串版本。
通过检查解析树的每个组件来进行替换,如下所示:如果它不是 env
中的绑定符号,则它保持不变。如果它是一个 Promise 对象,即函数的形式参数或使用 delayedAssign()
显式创建,则 Promise 的表达式槽将替换该符号。如果它是普通变量,则替换其值,除非env
是.GlobalEnv
,在这种情况下符号保持不变。
quote
和 substitute
都是 ‘special’ primitive 函数,它们不计算其参数。
值
结果的mode
通常是"call"
,但原则上可以是任何类型。特别是,single-variable 表达式具有模式 "name"
,常量具有适当的基本模式。
注意
substitute
在纯粹的词汇基础上工作。不能保证结果表达式有任何意义。
当参数为 expression(...)
时,替换和引用通常会引起混乱。结果是对 expression
构造函数的调用,需要使用 eval
进行计算以给出实际的表达式对象。
例子
require(graphics)
(s.e <- substitute(expression(a + b), list(a = 1))) #> expression(1 + b)
(s.s <- substitute( a + b, list(a = 1))) #> 1 + b
c(mode(s.e), typeof(s.e)) # "call", "language"
c(mode(s.s), typeof(s.s)) # (the same)
# but:
(e.s.e <- eval(s.e)) #> expression(1 + b)
c(mode(e.s.e), typeof(e.s.e)) # "expression", "expression"
substitute(x <- x + 1, list(x = 1)) # nonsense
myplot <- function(x, y)
plot(x, y, xlab = deparse1(substitute(x)),
ylab = deparse1(substitute(y)))
## Simple examples about lazy evaluation, etc:
f1 <- function(x, y = x) { x <- x + 1; y }
s1 <- function(x, y = substitute(x)) { x <- x + 1; y }
s2 <- function(x, y) { if(missing(y)) y <- substitute(x); x <- x + 1; y }
a <- 10
f1(a) # 11
s1(a) # 11
s2(a) # a
typeof(s2(a)) # "symbol"
参考
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
也可以看看
missing
对于参数‘missingness’,bquote
对于部分替换,sQuote
和dQuote
用于向字符串添加引号。Quotes
关于正引号、反引号和双引号 ‘′', '`', 和 '”’。
all.names
从表达式或调用中检索符号名称。
相关用法
- R substr 字符向量的子字符串
- R subset 向量、矩阵和 DataFrame 的子集化
- R summary 对象摘要
- R sum 向量元素之和
- R strsplit 分割字符向量的元素
- R seq.Date 生成规则的日期序列
- R search 给出 R 对象的搜索路径
- R solve 求解方程组
- R scan 读取数据值
- R sprintf 使用 C 风格字符串格式化命令
- R stop 停止函数执行
- R sign 标志函数
- R svd 矩阵的奇异值分解
- R strtoi 将字符串转换为整数
- R source 从文件、连接或表达式中读取 R 代码
- R sQuote 引用文字
- R switch 选择替代方案列表之一
- R strrep 重复字符向量的元素
- R split 分组并重新集合
- R slice.index 数组中的切片索引
- R sort 对向量进行排序或排序
- R standardGeneric 形式化方法系统 – 调度 S4 方法
- R sequence 创建序列向量
- R startsWith 字符串是否以另一个字符串开头或结尾?
- R system.file 查找 R 系统文件的名称
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Substituting and Quoting Expressions。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。