2017-02-13 73 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' 
相關問題