我试图将我的一些工作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正常工作)
错误泰坦尼克$年龄:$操作是无效原子矢量
消息39004,级别16,状态20,第11行
与HRESULT 0x80004004 'sp_execute_external_script' 的执行过程中发生A 'R' 脚本错误。消息39019,级别16,状态1,11号线
发生外部脚本错误:错误泰坦尼克$年龄:$操作是无效的原子矢量电话: 源 - > withVisible - >评估 - >评估 - >切割ScaleR中的错误。检查输出以获取更多信息。 eval(expr,envir,enclos)中的错误 :ScaleR中的错误。检查输出为 更多信息。电话:源 - > withVisible - >评估 - >评估 - > .CALL执行暂停
消息11536,级别16,状态1,11号线
EXECUTE语句失败,因为它与RESULT SETS子句指定1个 结果集(s),但该语句仅在运行 时间发送了0个结果集。
在此先感谢
'InputDataSet'是否只包含一列?如果是这样,那么可能你的问题是,当你说'titanic [complete.cases(titanic)]'try:'titanic [complete.cases(titanic),drop =从数据帧转换为矢量时, FALSE]' –
如果我的猜测是正确的,它与你使用SQL Server的事实没有任何关系,只是'read.csv(titanicUri,header = TRUE)'返回一个data.frame多个列,而'InputDataSet'有一列(我猜)。 R对待这两种情况有点不同。 –
的确,@TimGoodman,OP只是在输入数据集“SELECT”查询中选择一列。 – Parfait