gpt4 book ai didi

r - 如何从 R 的 sqlInterpolate 函数中删除嵌入的引号?

转载 作者:行者123 更新时间:2023-12-01 10:47:55 24 4
gpt4 key购买 nike

我正在尝试使用 DBI::sqlInterpolate 生成一堆 SQL 脚本函数,但由于脚本嵌入了与 R 变量一起返回的引号,因此不断出现 SQL 错误。

这是代码:

> x<-'state_transtions'
> y<-'transition_time'
> script<-"select * from ?x WHERE DATE(?y)> DATE_SUB(NOW(), INTERVAL 1 DAY)"
> sqlInterpolate(ANSI(),script,x=x,y=y)
#<SQL> select * from 'state_transtions' WHERE DATE('transition_time')> DATE_SUB(NOW(), INTERVAL 1 DAY)

如您所见,我正在通过 R 代码生成所需的 SQL 表名和列名。因此,注入(inject)值 (?x, ?y) 作为变量传递。

我查找了这个最接近找到解决方案的链接,但老实说,我不明白。 [ https://rstats-db.github.io/DBI/reference/sqlParseVariables.html#examples]

最佳答案

1) gsubfn gsubfn在 gsubfn 包中可以做替换。这里的正则表达式匹配一个问号后跟单词字符,然后它使用第二个参数中定义的对应关系对正则表达式中括号内部分匹配的部分执行替换。

library(gsubfn)

gsubfn("[?](\\w+)", list(x = x, y = y), script)

给出以下内容:
[1] "select * from state_transtions  WHERE DATE(transition_time)> DATE_SUB(NOW(), INTERVAL 1 DAY)"

2) fn$ gsubfn 软件包还提供 fn$它可以作为任何函数的前缀,并将对其参数执行字符串插值,给出相同的结果。 identity可以用任何其他合适的 R 函数替换。

它用名为 x 的变量的内容替换字符串中的 $x(其中 x 可以是任何仅由字母和数字组成的名称)。
library(gsubfn)

script2 <- "select * from $x WHERE DATE($y)> DATE_SUB(NOW(), INTERVAL 1 DAY)"
fn$identity(script2)

gsubfn 包由 sqldf 自动加载并经常与它一起使用,例如,
library(sqldf)

var <- "Time"
fn$sqldf("select $var from BOD where $var > `mean(1:7)`")

给予:
  Time
1 5
2 7

3) sprintf 也可以在不使用任何软件包的情况下仅使用 sprintf 来执行此操作。
sprintf("select * from %s  WHERE DATE(%s)> DATE_SUB(NOW(), INTERVAL 1 DAY)", x, y)

关于r - 如何从 R 的 sqlInterpolate 函数中删除嵌入的引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45713003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com