【发布时间】:2017-02-13 14:45:30
【问题描述】:
我正在尝试将我的一些工作 R 脚本移植到 SQL Server。我有以下 R 代码:
titanic <- read.csv(titanicUri, header = TRUE)
titanic <- titanic[complete.cases(titanic),]
titanic$AgeGroup <- cut(titanic$Age, c(0,13,100), labels=c("Young","Old"))
我在 SQL Server 中创建了一个表并导入了数据。当我尝试像这样实现“剪切”功能时:
EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
titanic <- InputDataSet;
titanic <- titanic[complete.cases(titanic),];
titanic$AgeGroup <- cut(titanic$Age, c(0,13,100), labels=c("Young","Old"));
titanic <- data.frame(titanic);
OutputDataSet <- titanic;
'
, @input_data_1 = N' SELECT Name FROM Titanic;'
WITH RESULT SETS (([PassengerName] varchar(Max)));
我收到此错误(complete.cases 工作正常)
titanic$Age 中的错误:$ 运算符对原子向量无效
Msg 39004,第 16 层,第 20 州,第 11 行
执行“sp_execute_external_script”期间出现“R”脚本错误,HRESULT 为 0x80004004。消息 39019,第 16 层,状态 1,第 11 行
发生外部脚本错误:titanic$Age 中的错误:$ 运算符对原子向量无效调用: source -> withVisible -> eval -> eval -> cutScaleR 中的错误。检查输出以获取更多信息。错误 eval(expr,envir,enclos):ScaleR 中的错误。检查输出 更多信息。调用:source -> withVisible -> eval -> eval -> .调用执行停止
消息 11536,第 16 级,状态 1,第 11 行
EXECUTE 语句失败,因为它的 WITH RESULT SETS 子句指定了 1 结果集,但语句在运行时只发送了 0 个结果集 时间。
提前致谢
【问题讨论】:
-
InputDataSet是否只包含一列?如果是这样,那么您的问题可能是当您说titanic[complete.cases(titanic),]尝试:titanic[complete.cases(titanic), , drop = FALSE]时,它已从 data.frame 转换为向量 -
如果我的猜测是正确的,这与您使用 SQL Server 的事实没有任何关系,只是
read.csv(titanicUri, header = TRUE)返回一个包含多列的 data.frame,而 @ 987654327@ 有一列(我猜)。 R 对这两种情况的处理方式不同,这有点令人费解。 -
确实,@TimGoodman,OP 只在输入数据集
SELECT查询中选择一列。
标签: sql-server r