Mẹo là sử dụng shQuote
và sprintf
nhưng tôi chắc chắn có một cách thông minh để làm điều đó.
library(sqldf)
library(RPostgreSQL)
options(sqldf.RPostgreSQL.user = "****",
sqldf.RPostgreSQL.dbname = "****",
sqldf.RPostgreSQL.host = "localhost",
sqldf.RPostgreSQL.port = 5432)
myfunc <- function(name)
sqldf(sprintf("select * from retrieve_data(%s)", shQuote(name)))
myfunc('Bill')
## id name year_born nationality
## 1 A1 Bill 2001 American
## 2 A2 Bill 1991 American
## 3 A3 Bill 1995 American
Nếu bạn muốn tránh trích dẫn chuỗi thì bạn có thể sử dụng
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, dbname = "tempdb")
myfunc2 <- function(name)
dbGetQuery(con, "select * from retrieve_data($1)", name)
myfunc2("Bill")
## id name year_born nationality
## 1 A1 Bill 2001 American
## 2 A2 Bill 1991 American
## 3 A3 Bill 1995 American