我编写了几个R脚本,我在SAP HANA中的RLANG存储过程中调用它们。
到目前为止,脚本工作正常,直到我在R脚本中包含for循环。我收到了这个错误。
Could not execute 'CREATE_PROCEDURE USE_ML(IN pred "PRED", IN model "MODEL", OUT result "RES") LANGUAGE RLANG ...'
SAP DBTech JDBC: [257]: sql syntax error: unterminated external language"
我所包含的代码与以下内容类似,如果直接在我的R控制台中启动,则可以正常工作。
pred <- data.frame(vendor = as.factor(c("John", "Jack", "John", "Jack")),
product = as.factor(c("Milk", "Water", "Beef", "Water")))
modLevel <- list(vendor = as.factor(c("John", "William", "Jack")),
product = as.factor(c("Milk","Beef", "Water", "Peanut")))
params <- c("vendor", "product")
for (p in params){
pred[,p] <- factor(pred[,p], levels(modLevel[[p]]))
}
毋庸置疑,我希望在此for循环中传递更多参数。
我的问题是以下问题。是(1)可以在SQL语句中包含这个for循环而不会出现语法错误,或者(2)我是否必须更改脚本的结构(如果是,我该怎么办)?
非常感谢任何帮助。
编辑以下是HANA中的完整SQL过程。
DROP PROCEDURE USE_ML_MODEL;
CREATE PROCEDURE USE_ML_MODEL(IN pred "PRED", IN model "MODEL", OUT result "RES")
LANGUAGE RLANG AS
BEGIN
modLevel <- unserialize(model$MOD_LEV[[1]])
params <- c("VENDOR", "PRODUCT")
for (p in params){
pred[,p] <- factor(pred[,p], levels(modLevel[[p]]))
}
result <- pred
END;
DROP PROCEDURE SQL_R_USE_MODEL;
CREATE PROCEDURE SQL_R_USE_MODEL(OUT result "RES")
LANGUAGE SQLSCRIPT AS
BEGIN
pred = SELECT VENDOR, PRODUCT FROM "PRED";
model = SELECT * FROM "MODEL";
CALL USE_ML_MODEL(:pred, :model , result);
END;
CALL SQL_R_USE_MODEL("RES") WITH OVERVIEW;
答案 0 :(得分:0)
似乎在R脚本中使用while
循环解决了这个问题。
p <- 1
while (p < length(params)){
pred[,params[p]] <- factor(pred[,params[p]], levels(modLevel[[params[p]]]))
p <- p+1
}
如果有人可以使用for
解释问题是什么,我会将问题保持打开状态。