Необходимо инициировать 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 внутри функции, он работает.
Также попытался объявить как массив, текст, объявив как вектор внутри функции.
Любая помощь приветствуется.