Печатать текст с подписками (программно) на консоль R - PullRequest
2 голосов
/ 02 апреля 2020

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

  1. подписи в R при добавлении другого текста
  2. Как буквально печатать верхние индексы в R, не используемые в надписях или легендах?
  3. Использование подписей и верхних индексов в консоли R

У индекса Unicode в R были некоторые полезные указатели. Я могу получить соответствующий код по этой ссылке , но это не позволяет мне программно создать код для нужного символа.

CODE

Вот простой пример уравнения для сжигания метана, который работает:

> sub2 <- '\u2082' # hard-coding unicode for '2' as a subscript
> sub4 <- '\u2084' # hard-coding unicode for '4' as a subscript
> cat(sprintf('CH%s + 2 O%s --> CO%s + 2 H%sO', sub4, sub2, sub2, sub2))
CH₄ + 2 O₂ --> CO₂ + 2 H₂O

Длительный обходной путь (подтверждение концепции):

desired_subscript <- 3.375
subs <- c('\u2080', '\u2081', '\u2082', '\u2083', '\u2084',
          '\u2085', '\u2086', '\u2087', '\u2088', '\u2089')

charvec <- as.character(x = desired_subscript)
lapply(0:9, function(z){
  charvec <<- gsub(pattern = z, replacement = subs[z+1], x = charvec)
  return(NULL)
})

> cat(charvec)
₃.₃₇₅

Вот что не работает:

замена последней ди git строки Unicode на то, что я хочу:

> cat(sub(pattern = '2', replacement = '4', x = sub2))
₂

Попытка создать строку Unicode:

> paste('\208','4',sep = '')
[1] "\02084"

У меня есть несколько уравнений для баланса и подписки не всегда целые числа. Есть ли способ программно получить Unicode для индекса, который я хочу включить в мой вывод на консоль?

1 Ответ

0 голосов
/ 03 апреля 2020

Попробуйте

создать функцию для возврата юникодов. Внимание: нет проверки ошибок

ss <- function (x) {intToUtf8 (0x2080 + x)} </p>

cat (sprintf ('CH% s + 2 O% s -> CO% s + 2 H% sO ', сс (4), сс (2), сс (2), сс (2)))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...