- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于如何在 dbplyr
SQL 翻译中使用 eval(parse(text=...))
的问题。以下代码完全按照我想要的方式使用 dplyr
使用 eval(parse(text=eval_text))
selected_col <- c("wt", "drat")
text <- paste(selected_col, ">3")
implode <- function(..., sep='|') {
paste(..., collapse=sep)
}
eval_text <- implode(text)
mtcars %>% dplyr::filter(eval(parse(text=eval_text)))
但是当我将其放入数据库时,它返回一条错误消息。我正在寻找任何允许我使用 or
运算符动态设置列名称和过滤器的解决方案。
db <- tbl(con, "mtcars") %>%
dplyr::filter(eval(parse(eval_text)))
db <- collect(db)
谢谢!
最佳答案
正确的方法,但 dbplyr 往往与可以接收 !!
运算符('bang-bang' 运算符)的东西一起工作得更好。 dplyr 曾一度拥有接受文本输入的 *_
版本的函数(例如 filter_
)。现在这是使用 NSE(非标准评估)来完成的。
一些引用文献:shiptech和 r-bloggers (抱歉,找不到官方 dplyr 引用)。
为了您的目的,您应该找到以下作品:
library(rlang)
df %>% dplyr::filter(!!parse_expr(eval_text))
全面工作:
library(dplyr)
library(dbplyr)
library(rlang)
data(mtcars)
df = tbl_lazy(mtcars, con = simulate_mssql()) # simulated database connection
implode <- function(..., sep='|') { paste(..., collapse=sep) }
selected_col <- c("wt", "drat")
text <- paste(selected_col, ">3")
eval_text <- implode(text)
df %>% dplyr::filter(eval(parse(eval_text))) # returns clearly wrong SQL
df %>% dplyr::filter(!!parse_expr(eval_text)) # returns valid & correct SQL
df %>% dplyr::filter(!!!parse_exprs(text)) # passes filters as a list --> AND (instead of OR)
关于R:使用 eval() 的 dbplyr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66073734/
什么是 dbplyr相当于DBI::dbSendQuery(con, "DELETE FROM WHERE ")的动词组合. 我想要的不是从数据库中查询数据,而是从数据库中删除数据和更新表。 我想在
我已使用 DBI::dbGetQuery 将数据提取到 SQL Server 中的临时表中. 即使在实际查询(不是下面的播放查询)中,我select convert(date, date_value)
用户有一个大表(3+ 十亿行)。 为了加快接下来几个月的查询速度,必须在远程数据库上创建索引。 假设有一个名为 conn 的连接- 创建索引并使其在与数据库断开连接后仍然存在的最佳方法是什么。 例如。
这个问题在这里已经有了答案: Pass SQL functions in dplyr filter function on database (2 个回答) 26 天前关闭。 我通常使用 filter
我正在尝试使用 str_detect , str_replace , str_replace_all dbplyr 中的方法与 oracle作为 beckend 数据库,但似乎无法访问此方法。 这是错
假设我想创建一个函数,该函数可以使用用户传递的任何函数来改变列。我需要知道如何在该函数到达 dbplyr 解析器之前引用和取消引用该函数。让我们看一个例子,假设我有一个这样的函数: testFun
我正在尝试将本地数据帧从 R 复制到我的 db2 数据库。我有权写入表,并且我已验证连接正常。 我正在使用: copy_to(connection, data.frame, name = my_tab
我正在尝试将本地数据帧从 R 复制到我的 db2 数据库。我有权写入表,并且我已验证连接正常。 我正在使用: copy_to(connection, data.frame, name = my_tab
我正在使用 dbplyr 包中的 in_schema() 函数在 R 的 postgresql 数据库的命名模式中创建表。 这不是一段新代码,它曾经按预期工作 = 在模式“my_schema”中创建一
函数 dbplyr::in_schema() 无法连接到大写字母的表。 当我在 PostgreSQL 中创建表时。 CREATE TABLE public."OCLOC" ( cod_ocloc
我想使用 dbplyr/dplyr 创建组级聚合变量。这是命令的要点: q = tbl_copy %>% group_by(group_var) %>% mutate(x_agg = min(
我正在使用 dbplyr 处理数据库表 我有一个本地表,想将它与数据库中的一个大表(150m 行)连接起来 数据库PRODUCTION是只读的 # Set up the connection and
我有一个非常简单的问题会产生错误。例子将清除这个。 library(odbc) library(DBI) library(dplyr) library(dbplyr) con % group_by
我有一个关于如何在 dbplyr SQL 翻译中使用 eval(parse(text=...)) 的问题。以下代码完全按照我想要的方式使用 dplyr 使用 eval(parse(text=eval_
我有一个关于如何在 dbplyr SQL 翻译中使用 eval(parse(text=...)) 的问题。以下代码完全按照我想要的方式使用 dplyr 使用 eval(parse(text=eval_
我正在尝试通过平均将分钟级别的时间序列数据聚合到每小时级别。 为了做到这一点,我想计算一个小时列,其中包含读取发生的日期和时间。然后我可以做一个简单的 group_by summarise。例如,我的
我目前可以通过 beeline CLI 访问 Apache Hive 数据库。我们仍在与 IT 协商以在服务器上获取 R。在那之前,我想 (ab) 使用 R dbplyr 包在另一台机器上生成 SQL
dbplyr 非常方便,因为它将 dplyr 代码转换为 SQL。这非常有效,除非它没有。例如,我试图通过将字符串与列中的值部分匹配来对行进行子集化。除了 postgres 之外,似乎这还没有在 db
我连接到我们的数据库: con <- dbConnect(odbc::odbc(), "myHive") 我知道这是成功的,因为当我运行它时,在 RStudio 的右上角我可以看到我们所有的数据库和表
我正在写一个 Shiny 的仪表板。要加载数据,我正在使用相当于 mydata % tbl('table1') %>% filter(position %in% in.posi
我是一名优秀的程序员,十分优秀!