问题描述
这里有一些类似的问题,但似乎都没有提供对我的特定问题的观点。
我正在构建一个带有 Plumber 包的 API,该包以集合表示法生成集合并将其返回到浏览器以在 MathJax 中显示。 MathJax 是 LaTeX 公式的渲染引擎。
问题在于在 R 中创建字符串以传递回浏览器。前端的可渲染字符串是这样读取的
$$\{1,2,3,...\}$$
我无法在 R 中创建该字符串,因为 \{
和 \}
不是有效的转义序列。我不是想逃避他们。我试图将这些字符放在字符串中并将其传递。 R 正在努力确保安全,而我需要不安全。
R 4.0 支持带有 r"(...)" 的原始字符串。我升级到 R4.0 并尝试了以下操作:
library(stringr)
library(plumber)
#* @get /someFunc
someFunc <- function(){
prefix <- r"($$\{)"
another <- "1,3"
postfix < r"(\}$$)"
result <- str_c(prefix,another,postfix)
return(result)
}
结果如下:$$\\{1,3\\}$$
该字符串未在前端正确呈现。 \
被转义,然后 {
不呈现。
谁能给我一些关于如何获取仅一个 \
的字符串的建议?我们目前正在前端执行字符串连接操作,但鉴于此 API 未来将涵盖的不同用例数量,这不是一个可持续的解决方案。
我不知道为什么这被关闭了。我明白cat
返回的是我想看到的,但是当字符串被api返回给浏览器时,JSON对象如下:
...
"content": [
[
"Select the correct union of the following sets"
],[
"$$\\{20,11,10,12,19\\}$$"
],[
"$$\\{7,19,5,18,4\\}$$"
]
],...
解决方法
要确定此类情况下问题的原因,我建议您在源代码中编写断言。
例如:
library(stringr)
library(assertthat)
mathjax_set <- function(elements){
prefix <- r"($$\{)"
postfix <- r"(\}$$)"
str_c(prefix,as.character(elements),postfix)
}
cat(mathjax_set("1,2,3"))
#> $$\{1,3\}$$
assertthat::are_equal(mathjax_set("1,3"),r"($$\{1,3\}$$)")
#> [1] TRUE
assertthat::are_equal(mathjax_set(c(1,3)),3\}$$)")
#> [1] FALSE