Dynamic “string” in R

半城伤御伤魂 提交于 2020-01-08 18:03:19

问题


Simple question, but cannot find the answer.

Instead of:

Df <- sqlQuery(ch, "SELECT * FROM tblTest WHERE Id=25")

I want a more dynamic piece of code. Something like:

Id <- 25
Df <- sqlQuery(ch, c("SELECT * FROM tblTest WHERE Id=", Id))

But this is not correct.


回答1:


We can use paste:

Df <- sqlQuery(ch, paste("SELECT * FROM tblTest WHERE Id =", Id))

c concatenates into a vector, paste is for string concatenation.

Or we can use sprintf:

sprintf("SELECT * FROM tblTest WHERE Id = %s", Id)



回答2:


If you have multiple or reused arguments and a query that contains % you can use something like the following:

sprintf("SELECT * FROM test WHERE id = %1$s AND name = %2$s and type like ‘%%tall%%’”, id, name)



回答3:


Just want to update this with a more modern answer using dplyr/tidyverse which uses string interpolation via the str_glue command:

str_glue("SELECT * FROM tblTest WHERE Id = {Id}")

You can put any expression you want in there. For example, if you wanted to select multiple Id's using a vector:

str_glue("SELECT * FROM tblTest WHERE Id IN ({str_c(id_vector, collapse = \",\"})")


来源:https://stackoverflow.com/questions/3416973/dynamic-string-in-r

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!