gpt4 book ai didi

r - PL/R 函数接受两个表作为参数

转载 作者:行者123 更新时间:2023-11-29 11:29:41 24 4
gpt4 key购买 nike

我正在努力寻找可以接受两个 postgres 表的 PL/R 函数示例。 PL/R docs没有提供任何这样的例子。
要有一个工作示例,可以考虑在 R 端使用两个 postgres 表的合并。

在 postgres 中有两个表

CREATE TABLE x (a numeric, b text);
CREATE TABLE y (a numeric, d text);
INSERT INTO x VALUES (1, 'a'),(2, 'b');
INSERT INTO y VALUES (2, 'b'),(3, 'c');

我正在寻找替换以下查询

SELECT * FROM x INNER JOIN y ON x.a=y.a;

在 R 中将 PL/R 函数定义为:

my_function = function(x, y){
merge(x, y, by = "a")
}

我能够调用 PL/R 函数,它接受单个表,而不是两个。

最佳答案

我不认为 postgeql 可以接受真实的表作为参数。

但还有另一种方法可以做到这一点。您可以将表名作为参数传递。
这是函数

CREATE OR REPLACE FUNCTION merge(t1 text, t2 text)
returns setof x as
BEGIN
execute 'select * from ' || t1 ||' join ' || t2 || ' on t1.a=t2.a';
END

以上是postgresql的函数,也可以写在R函数中。
这是 R 的代码

  1. 我们必须将表 x 的所有值存储到变量 x 中。看下面的代码

    x <- dbGetQuery(con, "SELECT * from sandbox.x") --con 是连接到你的数据库的连接,sandbox 是模式名,x 是表名

  2. 将表 y 的值存储到变量 y 中

    y<-dbGetQuery(con, "SELECT * from sandbox.y")

  3. 合并两个表

    total <- merge(x,y,by="a")

  4. 你也可以写另外一个函数来包装merge函数,看下面的代码

    myTotal <- function(x,y) { result <- merge(x,y,by="a") return(result) }

附上步骤截图供大家引用

enter image description here

关于r - PL/R 函数接受两个表作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36103842/

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