Как передать код латексного символа в таблицу данных в R? Я нашел этот пост, но я не знаю JS и понятия не имею, как реализовать что-то подобное в R.
[Редактировать] Я также попробовал решение LaTeX из этого поста, но взамен получил пустую таблицу.
МВЕ
library(DT)
df <- data.frame(var1 = c("A", "B"),
var2 = c("this string contains $\\alpha$", "this one $\\beta$"))
df %>%
datatable(
rownames = FALSE, escape = TRUE,
colnames = c("Col1", "Col2"),
filter = "top"
)
Если вы используете rstudio, вы можете перейти в раздел «Редактирование» > «Эмодзи и символы» >, найти альфа- и бета-символы и поместить их непосредственно в data.frame.
Спасибо @Mike, но это не вариант. Это часть более крупного процесса, в котором я просто передаю строки из одного места ввода в красивую отображаемую таблицу в другом месте. Решения типа «укажи и щелкни» не будут работать.
@M - Отредактировал исходное сообщение, чтобы указать, что я это уже пробовал (но забыл добавить в свое сообщение).
@RobinDonatello да, поэтому я не закрылся как дурак :)
Вы можете использовать пакет {katex}
вот так:
library(dplyr)
library(DT)
library(katex)
library(purrr)
# vectorized katex_html() with sensible settings for non-interactive use
katex_html_vec <- function(
tex,
displayMode = FALSE,
...,
include_css = TRUE,
preview = FALSE
) {
purrr::map_chr(tex, ~ {
katex::katex_html(
.x,
displayMode = displayMode,
...,
include_css = include_css,
preview = preview
)
})
}
data.frame(
var1 = c("A", "B"),
var2 = c("\\alpha", "\\beta")
) %>%
mutate(var2 = katex_html_vec(var2)) %>%
datatable(
rownames = FALSE,
colnames = c("Col1", "Col2"),
filter = "top",
escape = FALSE
)
Created on 2024-04-19 with reprex v2.1.0
Это решает именно ту проблему, о которой я писал, хотя мне не следовало быть таким кратким. На самом деле математические символы являются частью более крупной строки. Я отредактирую свой пост. По крайней мере, это указывает мне на пакет katex
, о котором я никогда не слышал.
Затем вы можете создать katex_htmls()
, который заменяет текст между каждым $ переводом на «katex html»:
library(dplyr)
library(DT)
library(katex)
library(purrr)
library(stringr)
# vectorized katex_html() with sensible settings for non-interactive use
katex_html_vec <- function(
tex,
displayMode = FALSE,
...,
include_css = TRUE,
preview = FALSE
) {
purrr::map_chr(tex, ~ {
katex::katex_html(
.x,
displayMode = displayMode,
...,
include_css = include_css,
preview = preview
)
})
}
# katex_html_vec() to process 0 or more $tex$s per string
katex_htmls <- function(
x,
displayMode = FALSE,
...,
include_css = TRUE,
preview = FALSE
) {
purrr::map_chr(x, ~ {
stringr::str_replace_all(.x, "\\$.*?\\$", function(m) {
m %>%
stringr::str_remove_all("\\$") %>%
katex_html_vec(
displayMode = displayMode,
...,
include_css = include_css,
preview = preview
)
})
})
}
data.frame(
var1 = c("A", "B"),
var2 = c("this string contains $\\alpha$", "this one $\\beta$")
) %>%
mutate(var2 = katex_htmls(var2)) %>%
datatable(
rownames = FALSE,
colnames = c("Col1", "Col2"),
filter = "top",
escape = FALSE
)
Created on 2024-04-19 with reprex v2.1.0
ух ты. это много. Спасибо! Он не работает «из коробки», поэтому мне потребуется немного времени, чтобы попытаться реализовать это в том, над чем я работаю.
Ну, есть вопрос, который показывает, как визуализировать их блестящими: stackoverflow.com/questions/71207531/latex-in-dtdatatable