在 R 函数中调用 SQL 函数

2023-12-27

我想知道是否可以致电SQL内的功能R功能?

举例来说,我有这个虚拟数据并且SQL函数写在Postgres 9.3

CREATE TABLE tbl (
   id VARCHAR(2) PRIMARY KEY
   ,name TEXT
   ,year_born NUMERIC
   ,nationality TEXT
);

INSERT INTO tbl(id, name, year_born, nationality)
VALUES ('A1','Bill',2001,'American')
      ,('B1','Anna',1997,'Swedish')
      ,('A2','Bill',1991,'American')
      ,('B2','Anna',2004,'Swedish')
      ,('B3','Anna',1989,'Swedish')
      ,('A3','Bill',1995,'American');


CREATE FUNCTION retrieve_data(TEXT) 
RETURNS TABLE ( id VARCHAR(2), name TEXT, year_born NUMERIC, nationality TEXT ) AS 
$func$
SELECT id, name, year_born, nationality
FROM tbl
WHERE name=$1 OR nationality=$1
GROUP BY 1
ORDER BY 1
$func$ LANGUAGE sql

我可以访问这些数据并在R环境通过RPostgreSQL and sqldf包装如下;

require(RPostgreSQL)
require(sqldf)

options(sqldf.RPostgreSQL.user = "****", 
        sqldf.RPostgreSQL.password = "****",
        sqldf.RPostgreSQL.dbname = "test_db",
        sqldf.RPostgreSQL.host = "localhost", 
        sqldf.RPostgreSQL.port = 5432)

sqldf("select * from retrieve_data('Bill')")

但是有没有办法调用上面的SQL内的功能R函数,例如喜欢;

myfunc <- function(name) {
sqldf("select * from retrieve_data(name)")
}

myfunc('Bill')

任何指点将不胜感激,谢谢!

UPDATE

使用$fn中的前缀sqldf按照@G建议的包。格洛腾迪克

myfunc2 <- function(name){
   fn$sqldf("select * from retrieve_data('$name')")
}

或者交换以上内容options以下代码以匹配 @dickoa 的建议答案

require(RPostgreSQL)
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv,
                 user="****",
                 password="****",
                 dbname="test_db",
                 host="localhost",
                 port=5432)

诀窍是使用shQuote and sprintf但我确信有聪明的方法可以做到这一点。

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

如果你想避免引用字符串,那么你可以使用

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 R 函数中调用 SQL 函数 的相关文章

  • 融化R中的下半矩阵

    如何融化下半三角形加对角矩阵 11 NA NA NA NA 12 22 NA NA NA 13 23 33 NA NA 14 24 34 44 NA 15 25 35 45 55 A lt t matrix c 11 NA NA NA NA
  • 如何在ubuntu的conda环境中更改Rstudio中的R版本

    我在基本系统中安装了 R 4 3 和 Rstudio 在 conda 环境中安装了旧版本的 R 4 2 3 命令which R返回环境中安装的 R 的目录 home 用户 miniconda3 envs anndata2ri pip bin
  • postgresql 登录到另一个表时发生冲突

    我正在使用 PostgreSQL 9 5 并尝试使用批量插入每天插入数百万行 INSERT INTO tours as cst adults country id price VALUES 3 129 80 2 119 120 on con
  • 如何添加链接以从我的 R闪亮应用程序在新窗口中打开 pdf 文件?

    我可以使用 a 从我的 Shiny 应用程序添加到外部站点的超链接 a google href http www google com 但如何创建一个链接来打开 pdf 或类似 文件 看起来应该很简单 但我找不到任何例子 我的问题与此类似
  • 如何在Django项目中使用PostgreSQL的存储过程或函数

    我正在开发一个 Django 项目 我决定在 PostgreSQL 中编写逻辑代码 而不是用 Python 编写 因此 我在 PostgreSQL 中创建了一个存储过程 例如 存储过程如下所示 create or replace proce
  • 带有可变 WHERE 子句的批量 UPDATE 表

    我有一堆值对 foo1 bar1 foo2 bar2 我想做一堆更新 将 foo 列设置为 foo1 其中 bar 列为 bar1 我正在使用 psycopg2 在 Python 中执行此操作 我可以executemany与查询UPDATE
  • 如何在 R 中合并同名列表中的数据框?

    我有一个包含很多数据框的列表 如果它们具有相同的名称 我想合并它们 即合并所有具有相同名称 a 和 b 的数据框 像这样 a lt aaaaa b lt bbbbb c lt ccccc g lt list df1 lt data fram
  • 如何对数字进行四舍五入并使其显示零?

    R 中将数字四舍五入到小数点后 2 位的常用代码是 gt a 14 1234 gt round a digits 2 gt a gt 14 12 但是 如果该数字的前两位小数位为零 则 R 会在显示中抑制零 gt a 14 0034 gt
  • 在 R 传单中添加不透明度滑块

    如何在 R leaflet 应用程序中添加滑块来控制特定图层的不透明度 对于这个应用程序 我不想使用闪亮 这里建议 在 R 传单应用程序中添加滑块 https stackoverflow com questions 37682619 add
  • 为什么数据帧上的 is.vector 不返回 TRUE?

    tl dr R 中的向量到底是什么 长版 R 中很多东西都是向量 例如 数字是长度为 1 的数值向量 is vector 1 1 TRUE 列表也是一个向量 is vector list 1 1 TRUE 好的 所以列表是一个向量 显然 数
  • 使用 R 下载压缩数据文件、提取和导入数据

    EZGraphs 在 Twitter 上写道 很多在线 csv 都被压缩了 有没有办法下载 解压缩存档并使用 R 将数据加载到 data frame Rstats 我今天也尝试这样做 但最终只是手动下载 zip 文件 我尝试过类似的东西 f
  • Oracle SQL 函数中可以有 commit 语句吗

    在 SQL 函数中使用 COMMIT 语句是否可能 有意义 从技术上来说 答案是肯定的 你can请执行下列操作 create or replace function committest return number as begin upd
  • SQL - 需要查找重复记录但排除反向事务

    我有一张交易表 偶尔会有 重复条目 如果 当管理员发现这些重复条目时 他们将撤销交易 从而创建负值 但由于监管要求 原始重复条目仍然保留 我想创建一个 SQL 查询 并使用 Crystal Reports 来制作报告 以便管理员轻松查找重复
  • R 中两个时间戳之间的左连接

    我的目标是执行左连接intervals哪里的bike id比赛和created at时间戳在records在 之间start and end in the intervals table gt class records 1 data ta
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 如何在 data.table 中分组后使用条件计算行数

    我有以下数据框 dat lt read csv s1 s2 v1 v2 a b 10 20 a b 22 NA a b 13 33 c d 3 NA c d 4 5 NA c d 10 20 dat gt A tibble 6 x 4 gt
  • 使用来自另一个数据库的选择查询更新 mysql 表

    我有两个数据库 我想用另一个数据库表中的值更新一个表 我正在使用以下查询 但它不起作用 UPDATE database1 table1 SET field2 database2 table1 field2 WHERE database1 t
  • 在R中循环子文件夹

    我正在 R 环境中包含多个子文件夹的文件夹中工作 我想要循环遍历多个子文件夹 然后在每个子文件夹中调用 R 脚本来执行 我想出了下面的代码 但我的代码似乎添加了 到子文件夹列表 我收到错误 文件中的错误 文件名 r 编码 编码 无效的 描述
  • Django 模型:默认日期时间未转换为 SQL CURRENT_TIMESTAMP

    我正在使用 Django 模型创建 PostgreSQL DB 我有一个 DateTimeField 我想将当前时间戳设置为默认值 我知道有多个消息来源建议如何做到这一点 但是 当我在 Django 之外检查数据库时 默认时间戳不会显示 我
  • 获取mysql中逗号分隔行中不同值的计数

    一个表 Jobs 有 2 列 JobId 城市 当我们保存工作时 工作位置可能是多个城市 如下所示 JobId City 1 New York 2 New York Ohio Virginia 3 New York Virginia 我如何

随机推荐

  • PLV8 是否支持对其他服务器进行 http 调用?

    如果我使用 PLV8 为 PostgreSql 编写一个函数 我可以从 PLV8 函数中调用带有 get post 请求的 URL 吗 不 正如米伦所解释的那样 使用不受信任的 PL 例如 PL perlu PL pythonu PL ja
  • WPF图像,如何去除模糊?

    I have I need XAML
  • RMI 无法连接到远程服务器

    我最近一直在使用 RMI 虽然我设法让它在本地主机上工作 但在尝试使用远程服务器时却遇到了各种各样的问题 这是我尝试运行的基本代码 Server public class RmiServer extends UnicastRemoteObj
  • JRebel 是如何工作的?

    JRebel 是否使用 Javassist 或某种字节码操作 我问这个纯粹是出于兴趣 我实际上 不需要 知道 JRebel 使用类重写 ASM 和 Javassist 和 JVM 集成来对各个类进行版本控制 此外 它还与应用程序服务器集成
  • 发生未处理的异常:找不到包“Microsoft.Win32.Registry”的编译库位置

    当我为 docker 构建我的 web 项目并将其作为容器运行时 我正在使用 asp net core 2 0 它会抛出如下异常 但当我在本地运行它时没有任何问题 在 docker build 之前我基本上做了 点网恢复 点网构建 点网发布
  • 实体框架多对多查询

    我想写一个简单的查询 但有一些问题 我有 2 个表 M 到 N 用户 gt 事件 我想获取特定事件的所有用户 通过 eventId 获取此事件 public IQueryable
  • 如何创建行为类似于 .cmd/.bat 的文件扩展名?

    我想这是一个奇怪的问题 但我很好奇 这是我迄今为止尝试过的 我已经导出并比较了值 HKEY CLASSES ROOT batfile HKEY CLASSES ROOT cmdfile HKEY CLASSES ROOT bat HKEY
  • Laravel 5 输入旧为空

    我的路线在这里 Route get sign up as gt signUp uses gt UserController signUpGet Route post sign up as gt signUpPost uses gt User
  • 在sqlite数据库android中插入日期时间

    如何使用 contentvalues 而不使用原始查询在我的 sqlite 数据库中插入日期时间数据 datetime now 插入自身 文本 而不是时间 我可以在当前时间上添加额外的时间吗 就像 当我按下按钮 1 HOUR 时 它会在 s
  • 了解 Java 易失性可见性

    我正在阅读有关 Java 的内容volatile关键字并对它的 可见性 感到困惑 volatile 关键字的典型用法是 volatile boolean ready false int value 0 void publisher valu
  • 如何从类内实例化的对象访问私有变量

    我正在尝试更改对象内部类的私有变量 该变量是在该类内部初始化的 我的意图可以从下面的简单例子中看出 这Increment打电话自obj应增加BaseClass stuff template
  • 在 VS2017 中找不到 ADO.net 实体数据模型模板

    我试图在 Visual Studio 2017 中创建 ASP NET MVC Web 应用程序 我需要采用 EF 数据库优先的方法来完成这项工作 不幸的是 我在 数据 模板文件夹中找不到 ADO NET 实体数据模型模板 我尝试过以下建议
  • Android 5.0 上窗口动画与导航栏重叠

    我正在实施材料设计底板 http www google com design spec components bottom sheets html我的应用程序中的设计模式使用自定义子类Dialog 该对话框被吸引到屏幕底部并使用 y 平移窗
  • 在 Hive 表中插入覆盖分区 - 值重复

    我创建了一个 Hive 表不分区表并使用选择查询将数据插入已分区蜂巢表 参考网站 https blog safaribooksonline com 2012 12 03 tip partitioning data in hive 通过上面的
  • 如何在一切都清楚的情况下重新启动 googlecolab 运行时?

    我在 colab 上安装了许多库和许多设置 现在我想清除我的 colab 帐户上的所有设置 文件 库和所有内容 有可能吗 To drop your current backend and start fresh with a new one
  • 角度材质对话框在导航后未关闭

    我正在开发一个显示数据表中实体概述的应用程序 每个实体都有链接实体 这些实体在列中显示为 xxx 链接实体 当用户单击该列的值时 将打开一个材料对话框 显示链接实体的列表 这些都是到其他实体的链接 单击这些链接之一后 会显示实体的正确页面
  • 如何提高 Google Big Query 每日查询配额

    我们正在运行批处理 并达到每日查询配额 20 000 有办法提高限额吗 thanks 我们通常很乐意提高每天的查询限制 目前为 40k 天 一般来说 它是为了防止滥用场景 使用 BigQuery 作为计算器的人 例如SELECT 17 32
  • 我可以在 1 个应用程序中拥有同一 UserControl 的多个实例吗?

    我正在创建一个文本编辑器类型应用程序 我可以通过选项卡打开多个编辑器 在我的第一次尝试中 我使用了简单的TextBoxes 编辑文本 一切正常 然后我创建了一个UserControl封装文本框 按钮来执行文本操作 例如 粗体 斜体等 我发现
  • 如何添加带有嵌套资源的删除路线 Rails 4

    Todo 有很多项目 我正在尝试添加一个链接以从待办事项列表中删除项目 我尝试过通过 id 在待办事项列表下查找项目的变体 但我无法弄清楚 这是基于我所做的更改的最新错误 我不知道如何解决这个问题 错误信息 No route matches
  • 在 R 函数中调用 SQL 函数

    我想知道是否可以致电SQL内的功能R功能 举例来说 我有这个虚拟数据并且SQL函数写在Postgres 9 3 CREATE TABLE tbl id VARCHAR 2 PRIMARY KEY name TEXT year born NU