2017-03-06 54 views
1

在「R交互」選項卡中,我可以訪問data.table。 Installr將它加載到我的個人文件夾中。 但是,當我試圖從SQL如何從SQL啓用data.table

EXECUTE sp_execute_external_script  
    @language = N'R'   
, @input_data_1 = N' select top 2 TodayClosed as Closed, Industry from stockquotes SQ 
    inner join StockSymbols SS on SS.ID = SQ.StockId where TodayClosed is not null;'  
, @script = N' 
    dtf <- data.frame(InputDataSet) 
    dt <- data.table(dtf) 
    dt[,list(mean=mean(Closed),sd=sd(Closed)),by=Industry]' 
WITH RESULT SETS (([mean] float NULL, [sd] float NULL, Industry char(75) NULL)); 

使用R I得到這個錯誤:

could not find function "data.table"

從其他錯誤消息,我會說這是在尋找 '程序文件'。 我試過在那裏安裝它沒有運氣。

+0

問題是缺少一大堆**信息。你正在談論SQL Server的* R Services *。這需要SQL Server 2016並首先安裝服務。你提到其他錯誤消息,但*不*'發佈它們。我敢打賭,你忘了導入你需要的軟件包。發佈*全部*錯誤消息並明確解釋您安裝的內容。你有沒有添加適當的軟件包? –

+0

無論如何**請勿**隨機安裝和修改。你可能最終會破壞R,SQL Server,你的機器或所有這些。 R或SQL Server都沒有損壞。你可以執行文檔中的任何樣本嗎? –

+0

首先,你有*安裝了''data.table'嗎?這是一個*獨立*包,必須按照[安裝和管理R軟件包]中的顯示加載(https://msdn.microsoft.com/en-us/library/mt709429.aspx) –

回答

3

首先,您必須將data.table包安裝到R Services可以找到的位置。當SQL運行一個R存儲過程時,它會爲您自己使用一個不同的用戶帳戶。按照MSDN documentation:

Step 3: Enable Implied Authentication for Launchpad Accounts

During setup, 20 new Windows user accounts are created for the purpose of running tasks under the security token of the SQL Server Trusted Launchpad service. When a user sends an R script from an external client, SQL Server will activate an available worker account, map it to the identity of the calling user, and run the R script on behalf of the user.

因此,將找不到安裝在您的用戶目錄樹下的任何軟件包。 R Services尋找軟件包的默認位置類似於C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\library,但您可能不應該在那裏安裝新軟件包,否則您可能會冒險破壞事情。相反,選擇或創建一個不同的,全局可訪問的目錄來安裝。

其次,您必須將data.table加載到您的R會話中。插入

.libPaths("packagedir") 
require(data.table) 

位於R腳本的頂部,其中packagedir是您選擇的目錄。

+0

@PanagiotisKanavos在PK和Hong Ooi之間的評論中,我能夠解決這個問題,我試圖從RServices安裝軟件包,但沒有權限,去CLI解決了這個問題,有趣的是,它對chron有依賴關係,我不得不手動安裝。 – BWhite