避免R函数粘贴生成引号的反斜杠

时间:2017-07-28 00:15:09

标签: r quotes paste

我正在尝试将两个包含引号的字符串("")组合为字符/字符串向量或R函数粘贴,以便我可以将结果插入{{{的writeFormula的参数x中3}}包。

一个例子是这样的

paste('HYPERLINK("file)',':///"&path!$C$1&TRIM(MID(CELL("filename",B',sep="")

我希望它能产生这样的结果

HYPERLINK("file:///"&path!$C$1&TRIM(MID(CELL("filename",B

但实际上它会在":

前面产生反斜杠
[1] "HYPERLINK(\"file):///\"&path!$C$1&TRIM(MID(CELL(\"filename\",B"

我搜索了许多可能的解决方案,例如用cat或openxlsx替换粘贴,但输出不是字符向量。像toString或as.character这样的函数可以将这些结果转换为字符串,但反斜杠也会返回。

真的很感激任何帮助。谢谢。

1 个答案:

答案 0 :(得分:6)

p中没有反斜杠。你看到的反斜杠就是R显示引号的方式(这样你就知道引号是字符串的一部分而不是结束分隔符)但不在字符串本身中。

p <- paste0('HYPERLINK("file)', ':///"&path!$C$1&TRIM(MID(CELL("filename",B')
p
## [1] "HYPERLINK(\"file):///\"&path!$C$1&TRIM(MID(CELL(\"filename\",B"

# no backslashes are found in p
grepl("\\", p, fixed = TRUE)
## [1] FALSE

noquote(p)cat(p, "\n")writeLines(p)可用于显示不带反斜杠转义符的字符串:

noquote(p)
## [1] HYPERLINK("file):///"&path!$C$1&TRIM(MID(CELL("filename",B

cat(p, "\n")
## HYPERLINK("file):///"&path!$C$1&TRIM(MID(CELL("filename",B 

writeLines(p)
## HYPERLINK("file):///"&path!$C$1&TRIM(MID(CELL("filename",B

可以看到单个字符由这样的空格分隔,并且没有反斜杠:

do.call(cat, c(strsplit(p, ""), "\n"))
## H Y P E R L I N K ( " f i l e ) : / / / " & p a t h ! $ C $ 1 & T R I M ( M I D ( C E L L ( " f i l e n a m e " , B 

正如另一个例子p2包含一个双引号并且其中包含一个字符,而不是2:

p2 <- '"'
p2
## [1] "\""

nchar(p2)
## [1] 1