首页 > 解决方案 > 解析和(取消)转义引号

问题描述

我有以下列表:

lst <- list(a = "", b = 2)

并想将其解析为文本:

> deparse(lst, width.cutoff = 100)
[1] "structure(list(a = \"\", b = \"\"), .Names = c(\"a\", \"b\"))"

然后我想将文本作为代码运行(在控制台中):

> structure(list(a = \"\", b = \"\"), .Names = c(\"a\", \"b\"))
Error: unexpected input in "structure(list(a = \"

我知道它失败了,因为反斜杠:(没有它们它显然可以工作)。

structure(list(a = "", b = ""), .Names = c("a", "b"))

问题:

我怎样才能避免创建反斜杠?

我尝试了什么:

我通过了给定的参数。反引号似乎是一个候选人,但没有奏效。使用 gsub 来替换它们是一个候选者,但我想这是一种肮脏的方式,..

工具:

R 3.4.3 工作室 1.1.447

更新:升级到 3.6 - 类似问题。

> lst <- list(a = "", b = 2)
> deparse(lst, width.cutoff = 100)
[1] "list(a = \"\", b = 2)"
> list(a = \"\", b = 2)
Error: unexpected input in "list(a = \"

标签: r

解决方案


有几种方法可以修改行为。一种方法是cat在控制台上打印,复制并粘贴(使用R 3.6.0

out <- deparse(lst, width.cutoff = 100)
cat(out, sep="\n")
#list(a = "", b = 2)
list(a = "", b = 2)
#$a
#[1] ""

#$b
#[1] 2

请注意,如果需要将输出写入某个文件并稍后使用它,则cat还要有一个参数file


或者用单引号 ( )gsub去掉"并替换'

out1 <- gsub('"', "'", out)
out1
#[1] "list(a = '', b = 2)"

推荐阅读