如何强制 r 打印带单引号的字符串?

How do I force r to print character strings with single quotes?

提问人:J.Sabree 提问时间:4/20/2022 更新时间:4/28/2022 访问量:219

问:

我正在编写一些与 SQL 接口的代码,我需要用单引号打印字符串,但 R 默认为双引号。当我去 ?报价,我没有看到任何指导。

关于如何在键入时打印以下字符串(带单引号)的任何建议?

help <- 'help me'
help

#Result :`-(
"help me"
R 字符串 字符 单引号

评论

3赞 MrFlick 4/20/2022
R 分析不记得你使用了哪些引号。它们对 R 没有影响。您可以添加单引号来设置值的格式,然后添加结果,以防止字符串周围出现常用的引号:。但是您无法更改解析器/控制台的默认行为。cat()cat(sQuote("help me", q=FALSE))
1赞 Allan Cameron 4/20/2022
此外,您似乎不太可能需要 R 使用单引号进行打印才能使其与 SQL 交互。你能举一个似乎需要这样做的例子吗?
0赞 thelatemail 4/20/2022
@AllanCameron - 例如,Oracle SQL 解释为字符串,但解释为列名。'string'"string"string
0赞 MrFlick 4/20/2022
但 R 打印到控制台的内容真的无关紧要。您需要字符串本身包含可能的引号。字符串值本身没有任何引号。它只是一个内存地址,在内存中以空字节结尾。也许你可以展示你是如何尝试构建你的SQL的。因为你现在的例子并不能很好地反映你实际想要做的事情。

答:

0赞 Uwe 4/28/2022 #1

以编程方式创建有效的 SQL 语句是 R 中的常见任务。因此,已经有可用的解决方案也就不足为奇了。仅举 2 个例子:

1. SQLDF格式

此示例摘自 G. Grothendiek 的 sqldf 概述

library(sqldf)
minSL <- 7
limit <- 3
species <- "virginica"
fn$sqldf("select * from iris where \"Sepal.Length\" > $minSL and species = '$species' limit $limit")
  Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
1          7.1         3.0          5.9         2.1 virginica
2          7.6         3.0          6.6         2.1 virginica
3          7.3         2.9          6.3         1.8 virginica

2.胶水

此示例修改自:help("glue_sql", "glue")

library(glue)
library(magrittr)
con <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
iris2 <- iris
colnames(iris2) <- gsub("[.]", "_", tolower(colnames(iris)))
DBI::dbWriteTable(con, "iris", iris2)
var <- "sepal_width"
tbl <- "iris"
num <- 2
val <- "setosa"
glue_sql("
  SELECT {`var`}
  FROM {`tbl`}
  WHERE {`tbl`}.sepal_length > {num}
    AND {`tbl`}.species = {val}
  LIMIT {limit}
  ", limit = 4, .con = con)  %T>%
  print()%>% 
  DBI::dbGetQuery(con, .)
<SQL> SELECT `sepal_width`
FROM `iris`
WHERE `iris`.sepal_length > 2
  AND `iris`.species = 'setosa'
LIMIT 4

  sepal_width
1         3.5
2         3.0
3         3.2
4         3.1

3. 其他资源

也许,研究一下 SQL 引用 () 或更低级的帮助页面可能是值得的:.?DBI::SQLsprintf()