R矢量成字符串的字符串

时间:2013-07-10 05:41:47

标签: sql r paste

我是R和mySQL的新手,想在R

中运行以下mysql命令
query = "select x, y from table where z in ('a', 'b');"
sqlQuery(connection, query)

假设我有一个很长的可变长度向量。是否可以

vector = c('a','b', .....)
query = "select x, y from table where z in **vector**;"

我试过

query = paste("select x, y from table where z in (", paste(vector, collapse =', '), ");")

但我在括号中丢失了引号,我得到了

query = "select x, y from table where z in (a, b);"

不能在sqlQuery中运行。有没有办法使用粘贴命令,以便我得到一串字符串?或者有更好的方法来完成我想要完成的任务吗?

3 个答案:

答案 0 :(得分:9)

您需要使用shQuote

query <- paste("select x, y from table where z in (", paste(shQuote(vector, type = "sh"), 
         collapse = ', '), ");")
query
[1] "select x, y from table where z in ( 'a', 'b', 'c', 'd' );"

答案 1 :(得分:1)

您可以将'括起来",使其真正成为字符串的一部分:

vector = c("'a'","'b'", .....)

一个例子:

> vec = c("'a'", "'b'", "'c'")
> paste(vec, collapse = ', ')
[1] "'a', 'b', 'c'"

答案 2 :(得分:1)

将您的矢量放入引号中,然后将其粘贴到查询中。

vector <- paste0("'", vector, "'", collapse=", ")

query <- paste("select ....", vector, <etc>)

shQuote为你做这件事,但这是滥用其目的。它用于引用 OS shell 的字符串,并且无法保证其默认选择将是您的数据库所期望的。例如,在Windows上,它用双引号包装所有内容,这是cmd.exe所期望的,但可能会破坏查询字符串。