我正在编写一些关于使用SQL和R的教程。但是当我尝试运行R脚本来获取'ggplot'库时,我收到以下错误
Msg 39004, Level 16, State 20, Line 1
A 'R' script error occurred during execution of 'sp_execute_external_script' with HRESULT 0x80004004.
Msg 39019, Level 16, State 1, Line 1
An external script error occurred:
Error in library("ggplot2") : there is no package called 'ggplot2'
Calls: source -> withVisible -> eval -> eval -> library
Error in ScaleR. Check the output for more information.
Error in eval(expr, envir, enclos) :
Error in ScaleR. Check the output for more information.
Calls: source -> withVisible -> eval -> eval -> .Call
Execution halted
(0 row(s) affected)
原始剧本
INSERT INTO chartBinary (binData)
EXEC sp_execute_external_script
@language = N'R',
@script = N'
library("ggplot2");
img <- inputDataSet;
image_file = tempfile();
png(filename = image_file, width=800, height=600);
print(ggplot(img, aes(x = AirportID, y = WindSpeed)) +
labs(x = "Airport ID", y = "Wind Speed") +
theme(axis.text.x = element_text(angle=90, hjust=1, vjust=0)) +
geom_point(stat = "identity") +
geom_smooth(method = "loess", aes(group = 1)) +
geom_text(aes(label = AirportID), size = 3, vjust = 1.0) +
geom_text(aes(label = round(WindSpeed, digits = 2)), size = 3, vjust = 2.0));
dev.off();
OutputDataset <- data.frame(data=readBin(file(image_file,"rb"),what=raw(),n=1e6));',
@input_data_1 = N'SELECT AirportID, AVG(CONVERT(float, WindSpeed)) as WindSpeed
FROM
[Weather_Sample] GROUP BY AirportID ORDER BY AirportID;',
@input_data_1_name = N'inputDataSet',
@output_data_1_name = N'OutputDataset';
系统具有SQL 2016,SSMS 2017,MS R Open 3.4.0 与R的集成与Visual Studio 2015配合良好,没有错误。可以下载库包并运行脚本,没有错误。只有当我开始使用SMSS时,我才能下载软件包
答案 0 :(得分:3)
您需要将 ggplot2 包安装到SQL Server实例。 有多种方法可以将不可用的R包安装到SQL Server实例。
根据您的设置,您将选择适合您的方法。
如果您正在使用本地计算机,则需要下载程序包的 Windows二进制文件(zip文件)并使用T-SQL进行安装。
答案 1 :(得分:0)
出于安全原因,SQL Server使用具有降低权限的单独帐户运行您的R脚本。特别是,这与您自己的用户帐户不同。因此,如果您在自己的用户目录下安装了软件包,那么脚本将无法找到它们。
修复方法是将软件包安装在一个单独的,全局可读的目录中(比如c:\Rlib
)。完成此操作后,在.libPaths("c:\\Rlib")
来电之前添加library()
,将脚本指向该位置。