2012-10-11 11 views
10

Według podręcznika quote(expr):Poprawne wyrażenia do funkcji cytując

expr: dowolny składniowo poprawne wyrażenie R

Podczas gdy quote(x==y) Zwraca połączeń x==y powodzeniem, quote(x=y) zawiedzie:

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

Zarówno x=y i x==y to syntaktycznie poprawne wyrażenia R, czyż nie? Dlaczego quote() kończy się niepowodzeniem na x=y?

Odpowiedz

11

Jak mówi ?"=":

Operator „< -” może być używany w dowolnym miejscu, podczas gdy operator „=” jest dozwolone tylko na najwyższym poziomie (na przykład w pełnej ekspresji wpisane w wierszu polecenia) lub jako jedno z podwyrażeń w zbrojonej liście wyrażeń .

Korzystanie = w argument quote nie używa go na najwyższym poziomie, więc trzeba umieścić go w nawiasach lub nawiasy, ale nadal trzeba uważać, jak ocenić to wyrażenie, od powyższych zasad nadal będzie obowiązywać.

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

Aby rozwiązać komentarz:

Jak Gavin Simpson powiedział: w zasadzie, „najwyższym poziomie” to po wpisaniu lub uruchomić kod w wierszu polecenia i nie jest w wywołaniu funkcji. Weźmy na przykład z = quote(expr=x). z = quote(...) jest oceniany na najwyższym poziomie, ale expr=x nie jest, ponieważ znajduje się wewnątrz wywołania funkcji.

W quote(expr=x), = jest używany do przypisania wartości x do argumentu funkcji expr; więc nie pracujesz już na najwyższym poziomie, budujesz listę argumentów funkcji (pairlist). Przyczyną niepowodzenia jest quote(x=y), ponieważ quote nie ma argumentu .

Kontekst górny jest krótko opisany w R Internals, w Section 1.4, Contexts.

+0

Świetna odpowiedź! Dzięki – Ali

+0

Jeśli uważasz to za "wspaniałą odpowiedź", czy nie powinieneś tego zaakceptować? –

+0

@Jilber: Dokładnie! Czekam na to! – Ali

Powiązane problemy