當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R substitute 替換和引用表達式


R語言 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

a call,即R的對象class(和mode)"call".

env

環境或列表對象。默認為當前評估環境。

細節

substitute 的典型用途是為數據集和繪圖創建信息標簽。下麵的 myplot 示例展示了此函數的簡單用法。它使用函數 deparsesubstitute 為繪圖創建標簽,這些標簽是函數 myplot 的實際參數的字符串版本。

通過檢查解析樹的每個組件來進行替換,如下所示:如果它不是 env 中的綁定符號,則它保持不變。如果它是一個 Promise 對象,即函數的形式參數或使用 delayedAssign() 顯式創建,則 Promise 的表達式槽將替換該符號。如果它是普通變量,則替換其值,除非env.GlobalEnv,在這種情況下符號保持不變。

quotesubstitute 都是 ‘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對於部分替換,sQuotedQuote用於向字符串添加引號。Quotes關於正引號、反引號和雙引號 ‘⁠′⁠', '⁠`⁠', 和 '⁠”⁠’。

all.names 從表達式或調用中檢索符號名稱。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Substituting and Quoting Expressions。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。