2017-02-13 34 views
0

我试图将我的一些工作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个结果集。

在此先感谢

+0

'InputDataSet'是否只包含一列?如果是这样,那么可能你的问题是,当你说'titanic [complete.cases(titanic)]'try:'titanic [complete.cases(titanic),drop =从数据帧转换为矢量时, FALSE]' –

+1

如果我的猜测是正确的,它与你使用SQL Server的事实没有任何关系,只是'read.csv(titanicUri,header = TRUE)'返回一个data.frame多个列,而'InputDataSet'有一列(我猜)。 R对待这两种情况有点不同。 –

+0

的确,@TimGoodman,OP只是在输入数据集“SELECT”查询中选择一列。 – Parfait

回答

1

由于@TimGoodman评论,您的输入数据集是一列由指定SELECT查询。简单地扩展列上市有年龄可供选择:

@input_data_1 = N'SELECT * FROM Titanic;' 

考虑过指定输出数据集。请参阅有帮助mssqltips.com guide

@output_data_1_name = N'titanic' 
相关问题