Изобразите положительный символ бесконечности и отрицательный символ бесконечности.
Мне было интересно, как я могу построить положительный знак бесконечности и - знак бесконечности в графике?
Вот мой код R (без успеха):
plot(1, ty ='n', ann = F, xlim = c(-4, 6), ylim = c(-3.5, 1.5) )
text(c(-4, 6 ), rep(1, 2), c( bquote(- infinity ), bquote(infinity ) ) )
2 ответа:
?plotmath
стартыЕсли аргумент
text
для одной из функций рисования текста (text
,mtext
,axis
,legend
) в R есть выражение , аргумент равен интерпретируется как математическое выражение и вывод будет отформатирован в соответствии с Текс-подобными правилами.И
labels
параметрtext
задокументирован какВектор символов иливыражение , задающеетекст , который будет записан. Один попытка сделана принуждать другие языковые объекты (имена и вызовы) к выражения, векторы и другие классифицируемые объекты для обозначения векторов
as.character
.(Курсив мой).
bquote
фактически возвращает не выражение (класс R, а не понятие), а объект языка (в частности, вызов). Это вызывает две проблемы:
- поскольку R не может обрабатывать вектор вызовов,
c
фактически не создает вектор, а вместо этого приводит результат к списку, аналогичному тому, какc(sum, mean)
принужден к списку, и- В то время как
text
принудит вызов, возвращенный из самогоbquote
, к выражению (которое будет правильно проанализировано), он принудит список к символьному вектору, который не интерпретируется в соответствии сplotmath
.Вы можете принудительно вызвать список вызовов, произведенных с помощью
c
иbquote
явно с помощьюas.expression
, но быстрее просто вызватьexpression
напрямую и полностью избежатьbquote
:plot(1, ty ='n', ann = F, xlim = c(-4, 6), ylim = c(-3.5, 1.5)) text(c(-4, 6 ), rep(1, 2), expression(-infinity, infinity))
В качестве заключительной ноты,
c
на самом деле делает работу над несколькими выражениями-вроде-в том, чтоc(expression(-infinity), expression(infinity))
возвращаетexpression(-infinity, infinity)
. В отличие отbquote
, который имеет два именованных параметра,expression
принимает...
, поэтому проще просто вызвать его один раз с несколькими входами.