带引号的多行字符串R

时间:2017-04-24 13:30:49

标签: r string whitespace clipboard quoting

我想在R中选择包含内部引号作为单个对象的多行字符串。但是,我希望在对象内保留空格,换行符和双引号"(以及任何单引号')。

到目前为止,我尝试过的所有字符串函数(例如catquotepaste print)都不起作用。除非我将代码包装在writeClipboard(双引号)中,否则使用"之类的函数不会起作用。

  • 但是,当我这样做时,我想要组合的字符串里面的"会干扰包裹"

这是一个使用writeClipboard的例子(因为这是我的最终目标):

这不起作用:

 writeClipboard(
   "
     x <- 1 + 2
     y <- "string" #I'm adding a random string surrounded by ""
     z <- function(x,y) {
            paste(x,y)
          }
     z(x,y)
   "
 )

确实有效(但我被迫将所有"更改为'):

 writeClipboard(
   "
     x <- 1 + 2
     y <- 'string' #I'm adding a random string surrounded by ''
     z <- function(x,y) {
            paste(x,y)
          }
     z(x,y)
   "
 )

有没有办法拯救&#34;多行字符串将空格,换行符以及混合的'"字符组合成一个字符串?

  • 同样,我主要对writeClipboard()这样做感兴趣,但也会赞赏更一般的答案!

谢谢!

1 个答案:

答案 0 :(得分:1)

基于deparse(quote(...))模式(丑陋的paste(head(tail(...包装器用于摆脱额外的花括号):

code_ <- paste(head(tail(deparse(quote({
  x <- 1 + 2
  y <- "string" #I'm adding a random string surrounded by ""
  z <- function(x,y) {
    paste(x,y)
  }
  z(x,y)
})), - 1), - 1), collapse = "\n")

cat(code_)

#     x <- 1 + 2
#     y <- "string"
#     z <- function(x, y) {
#         paste(x, y)
#     }
#     z(x, y)

print(code_)

# [1] "    x <- 1 + 2\n    y <- \"string\"\n    z <- function(x, y) {\n        paste(x, y)\n    }\n    z(x, y)"

writeClipboard(code_)