R - 包含转义字符“\”

问题描述

这里有一些类似的问题,但似乎都没有提供对我的特定问题的观点。

我正在构建一个带有 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...