r - 在 pl/r 中传递一个向量作为参数来启动一个 for 循环
问题描述
需要for loop
使用. vector
_ pl/r
代码如下:
DROP TYPE IF EXISTS tsdata CASCADE;
CREATE TYPE tsdata
AS
(
a text,
b text,
c text,
d text
);
DROP FUNCTION IF EXISTS standard.create_pd_ts(data char, dimnames char);
CREATE FUNCTION standard.create_pd_ts(data char, dimnames char)
RETURNS setof tsdata AS
$$
drv <- dbDriver("PostgreSQL")
conn <- dbConnect(drv, dbname = 'abc')
iq <- paste0("select * from data")
data <-dbGetQuery(conn, iq)
data <- data.frame(coef_db_res_tab)
for(i in 1:length(dimnames)) {
var = dimnames [i]
uniquedim= unique(data[,i])
assign(paste0('dim',i),uniquedim)
}
## save dimensions in a vector
dimvec<-paste0('dim',1:length(dimnames),collapse = ',')
tsdata <- eval(parse(text=paste0("expand.grid(", dimvec,
",stringsAsFactors = FALSE)")))
return(tsdata)
$$
LANGUAGE 'plr';
select
(q).a,
(q).b,
(q).c,
(q).d
from
(
select * from standard.create_pd_ts(‘data’, 'c("a","b","c","d")')
) q ;
该函数的动机是找到 a、b、c 和 d 列的唯一值;此后,将相同的值存储在 dimvec 向量中,然后使用每列的唯一值来扩展网格以创建所有组合。尝试了各种方法,但 for 循环没有启动。如果我在函数内声明 dimnames 向量,它就可以工作。
还尝试在函数内声明为数组、文本、声明为向量。
任何帮助表示赞赏。
解决方案
select
(q).a,
(q).b,
(q).c,
(q).d
from
(
select * from standard.create_pd_ts('data', ARRAY['a','b','c','d'])
) q ;
这对我有用。感谢我的老板:)
推荐阅读
- aspnetboilerplate - ABP BoilerPlate 升级到 6.3 后,无法调用 IAsyncBackgroundJob
- python - 从python函数的列表中删除字符
- javascript - 到达动态输入时动态增加数字
- html - 如何使此导航栏中的其余文本与徽标内联显示
- c++ - 可以重置 std::call_once 吗?
- python - 如何在 Python 模块中使用 __name__ == "__main__" 进行多处理
- alasql - 关于使用alasql导出设置列宽
- javascript - 如何保持两个边界的交集?
- python - 在 for 循环中找不到嵌入
- r - prop.test 未显示置信区间