2012-03-09 1 views
2

Je suis familier avec l'utilisation expression() et bquote() en traçant le balisage spécial de Tex comme dans les graphiques de base textuels dans R. Mais comment faire "approximativement égal à" sans avoir l'erreur de l'analyseur jeter . Je fais référence à ?plotmath lors de la détermination du balisage.Texte de tracé contenant "approximativement égal à" dans R

plot(c(1,100), c(1,100), type="n", axes=FALSE, xlab="", ylab="") 

# This works 
text(50, 80, expression(paste("The area is 24 ", km^2))) 

# This doesn't 
text(50, 50, expression(paste("Reginald is ", %~~% , "14 years old"))) 

Répondre

9

Cela devrait faire l'affaire:

plot(c(1,100), c(1,100), type="n", axes=FALSE, xlab="", ylab="") 
text(50, 50, 
    expression(paste("Reginald is ", phantom() %~~% phantom(), "14 years old"))) 

La raison pour laquelle votre version ne fonctionnait pas est que le %~~% « opérateur » prévoit de faire partie d'une expression quelque chose à la fois sa gauche et son droite. phantom() vous fournit quelque chose qui est (a) invisible et (b) ne prend aucune largeur --- exactement ce dont vous avez besoin.

Modifier:

j'apprends quelque chose tous les jours. Brian Diggs souligne, dans les commentaires, que vous pouvez produire le même effet, plus simplement en omettant les virgules dans l'expression (dans ce cas, vous n'avez même pas besoin d'un appel imbriqué à paste()). C'est la meilleure solution:

text(50, 50, expression("Reginald is " %~~% "14 years old")) 
+0

Merci pour cela, cela fonctionne. Est-ce documenté quelque part évident que j'ai manqué? – digitalmaps

+0

Non, ce n'est pas évident, et c'était difficile pour moi de trouver quand j'en avais besoin. Je pense que je l'ai découvert en regardant les exemples affichés en tapant 'demo (plotmath)'. C'est sur la troisième page qui apparaît. Il est également inclus dans la liste des fonctionnalités '? Plotmath', mais son utilité n'est pas vraiment épelée. –

+4

Dans ce cas, vous pouvez utiliser les chaînes elles-mêmes au lieu de 'phantom()': 'text (50, 50, expression (paste (" Reginald est "% ~~%" 14 ans ")))' –