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