2012-10-11 155 views
10

acuerdo con el manual de quote(expr):expresiones válidas para la función cotización

expr: cualquier expresión R sintácticamente válida

Mientras que quote(x==y) devuelve una llamada x==y éxito, quote(x=y) falla:

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

Ambos x=y y x==y son expresiones R sintácticamente válidas, ¿verdad? ¿Por qué quote() falla en x=y?

Respuesta

11

como se dice en ?"=":

El operador '< -' se puede utilizar en cualquier lugar, mientras que el operador '=' es sólo se permite en el nivel superior (por ejemplo, en la expresión completa mecanografiado en el símbolo del sistema) o como una de las subexpresiones en una lista de expresiones reforzada .

Usando = en una discusión a quote no lo está utilizando en el nivel superior, así que hay que poner en llaves o paréntesis, pero todavía tiene que tener cuidado de cómo se evalúa esta expresión, ya que las reglas anteriores todavía se aplicará.

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

Para hacer frente a un comentario:

Como Gavin Simpson dijo: básicamente, el "nivel superior" es cuando se escribe o ejecutar el código en el indicador y no está dentro de una llamada de función. Tome z = quote(expr=x) por ejemplo. z = quote(...) se evalúa en el nivel superior, pero expr=x no se debe a que esté dentro de una llamada de función.

En quote(expr=x), = se utiliza para asignar el valor de x al argumento de la función expr; por lo que ya no trabajas en el nivel superior, estás construyendo una lista de argumentos de función (pairlist). El motivo por el que quote(x=y) falla es porque quote no tiene un argumento x.

El contexto del nivel superior se describe brevemente en R Internals, en Section 1.4, Contexts.

+0

¡Excelente respuesta! Gracias – Ali

+0

Si lo considera como "una gran respuesta", ¿no debería aceptarlo? –

+0

@Jilber: ¡Exactamente! ¡Lo estoy esperando! – Ali

Cuestiones relacionadas