【问题标题】:Avoid R function paste generating backslash for quotes避免 R 函数粘贴为引号生成反斜杠
【发布时间】:2018-01-03 21:37:02
【问题描述】:

我正在尝试获取两个包含引号 ("") 的字符串,它们组合为字符/字符串向量或 R 函数粘贴,因此我可以将结果插入 openxlsx 包中 writeFormula 的参数 x 中。

一个例子是这样的

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"

我已经搜索了许多潜在的解决方案,例如将 paste 替换为 cat 或 add noquote function in front of paste,但输出不是字符向量。 toString 或 as.character 之类的函数可以将这些结果转换为字符串,但反斜杠也会返回。

非常感谢您对此提供的任何帮助。谢谢。

【问题讨论】:

  • 没有斜线。 \" 只是 " 前面有一个转义字符。试试cat(paste(...))
  • 您好 thelatemail,感谢您的回答。我之前尝试过,但正如我所说,函数 cat 和 noquote 无法生成字符/字符串向量。
  • 字符串中没有斜线。当 R print 是屏幕上的值时,它会添加它。你的粘贴工作得很好。使用cat() 代替默认打印来查看,而不是粘贴:cat(paste('HYPERLINK("file)',':///"&path!$C$1&TRIM(MID(CELL("filename",B',sep=""))。但cat() 仅用于打印到屏幕上。粘贴的结果就是你想要的。查看this FAQ
  • 请重新阅读您找到的帖子。您显然没有仔细阅读它们。 grep("\\\\", "\'") 将返回 FALSE。所以...没有斜线。

标签: r quotes paste


【解决方案1】:

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

【讨论】:

  • 感谢您的详细解释。在我使用的参数中插入粘贴函数的输出时,确实没有斜线。另外,感谢 MrFlick、thelatemail 和 42 的简短回答。
猜你喜欢
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 2020-10-05
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多