2012-10-11 16 views
10

secondo il manuale di quote(expr):espressioni valide alla funzione citazione

expr: qualsiasi espressione R sintatticamente valida

Mentre quote(x==y) restituisce una chiamata x==y successo, quote(x=y) fallisce:

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

Entrambi x=y e x==y sono espressioni R sintatticamente valide, no? Perché quote() non riesce su x=y?

risposta

11

come si dice nel ?"=":

L'operatore '< -' può essere utilizzato ovunque, mentre l'operatore '=' è consentito solo al livello superiore (ad esempio, l'espressione completa digitato al prompt dei comandi) o come una delle sottoespressioni in un elenco di espressioni rinforzato .

Utilizzando = in un argomento per quote non lo sta utilizzando al livello più alto, quindi bisogna mettere tra parentesi o parentesi, ma si devono ancora fare attenzione a come si valuta questa espressione, dal momento che le regole di cui sopra si applicherà ancora.

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

Per affrontare un commento:

Come Gavin Simpson ha detto: in fondo, il "livello superiore" è quando si digita o si esegue il codice al prompt e non è all'interno di una chiamata di funzione. Prendi ad esempio z = quote(expr=x). z = quote(...) viene valutato al livello superiore, ma expr=x non è perché si trova all'interno di una chiamata di funzione.

In quote(expr=x), = viene utilizzato per assegnare il valore di x all'argomento di funzione expr; quindi non stai più lavorando al livello più alto, stai costruendo un elenco di argomenti di funzione (pairlist). Il motivo quote(x=y) non riesce perché quote non ha un argomento x.

Il contesto di primo livello è descritto brevemente in R Internals, in Section 1.4, Contexts.

+0

Ottima risposta! Grazie – Ali

+0

Se la consideri come "un'ottima risposta" non dovresti accettarlo? –

+0

@Jilber: Esattamente! Lo sto aspettando! – Ali

Problemi correlati