2012-04-06 3 views
4

Я хотел бы сопоставить последовательность целых чисел с последовательностью литералов выражения, чтобы использовать их как метки меток в графике, например.Создайте список литералов выражения из целочисленной последовательности

lbls <- lapply(-2:2, function(i) expression(i * pi)) 
plot(...) 
axis(1, at=seq(-2,2)*pi, labels=lbls) 

До сих пор я перепробовал все варианты bquote, substitute, expression и т.д., что я мог думать о, но, видимо, я должен был что-то пропустил. Кроме того, ответы на часто задаваемые вопросы и связанные с ними вопросы & не полностью решили это для меня.

Как бы я сделать это правильно (я хочу, чтобы сделать axispi как греческая буква и имеет -2 ... 2 заменить i в приведенном выше примере)?

ответ

4

попробовать это:

lbls <- do.call("expression", lapply(-2:2, function(i) substitute(X * pi, list(X = i)))) 
plot(-10:10, -10:10, xaxt="n") 
axis(1, at=seq(-2,2)*pi, labels=lbls) 

enter image description here

+0

работает как шарм, спасибо! – fotNelton

+2

Спасибо @Roman или, используя 'bquote', вы можете написать вот так:' lbls <- do.call ("expression", lapply (-2: 2, function (i) bquote (. (I) * pi))) ' – kohske

2

Попробуйте это:

lbls <- parse(text = paste(seq(-2, 2), "pi", sep = "*")) 
+0

Ницца! Я, должно быть, упустил параметр 'text' в'? Parse'. – fotNelton

+0

Это предложение более полезно для тех, чьи выражения в списке сильно отличаются. Благодаря! – Nova

Смежные вопросы