2012-10-11 76 views
10

quote(expr)手動:有效表達式到報價功能

EXPR:任何語法上有效的R的表達

雖然quote(x==y)返回一個呼叫x==y成功,quote(x=y)失敗:

Error in quote(x = y) : supplied argument name 'x' does not match 'expr' 

Both x=y and x==y是語法上有效的R表達式,不是嗎?爲什麼quote()失敗x=y

回答

11

正如它說在?"="

運算符「< - 」可以在任何地方使用,而運算符「=」是 只允許在頂部電平(例如,在完整的表達類型 在命令提示符處)或者作爲表達式列表中的一個子表達式的子表達式之一。

在參數quote使用=沒有使用它在頂層,所以你必須把它放在括號或括號,但你仍然有你如何評價這種表達要小心,因爲上述規則仍然適用。

quote({x=y}) 
quote((x=y)) 

爲了解決評論:

由於加文·辛普森說:基本上,「頂級」,是當你輸入或在提示符下運行的代碼,而不是一個函數調用中。以z = quote(expr=x)爲例。 z = quote(...)在頂層進行評估,但expr=x不是因爲它在函數調用中。

quote(expr=x),=正被用於將x的值賦值給函數參數expr;所以你不再在頂層工作,你正在構造一個函數參數列表(pairlist)。 quote(x=y)失敗的原因是因爲quote沒有x參數。

R InternalsSection 1.4, Contexts中簡要描述了頂級上下文。

+0

很好的回答!謝謝 – Ali

+0

如果你認爲它是「一個很好的答案」,你不應該接受它嗎? –

+0

@Jilber:沒錯!我正在等待它! – Ali