我試圖將我的一些工作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