Sql 服务器和 R,数据挖掘
Sql server and R, data mining
我正在使用 Microsoft SQL Management Studio 2016,使用让我将 R 脚本添加到 SQL 代码中的功能。
我的目标是实现一个 aPriori 算法程序,以我喜欢的方式放置数据,即 table x,第一个对象,y,第二个对象。
我被困在这里,因为我认为我的数据有问题。错误是这样的。
A 'R' script error occurred during execution of
'sp_execute_external_script' with HRESULT 0x80004004.
An external script error occurred: Error in eval(expr, envir, enclos)
: bad allocation Calls: source -> withVisible -> eval -> eval -> .Call
这是我的代码。
源数据是 table 两列,如下所示:
A B
a f
f a
b c
...
y z
这里是代码:
GO
create procedure dbo.apriorialgorithm as
-- delete old table
IF OBJECT_ID('Data') IS NOT NULL
DROP TABLE Data
-- create a table that store the query result.
CREATE TABLE Data ( art1 nvarchar(100), art2 nvarchar(100));
-- store the query
INSERT INTO Data ( art1, art2)
select
firstfield as art1,
secondfield as art2
from allthefields
;
IF OBJECT_ID('output') IS NOT NULL
DROP TABLE output
-- create table of the results of the analysis.
CREATE TABLE output (x nvarchar(100), y nvarchar(100));
INSERT INTO output (x, y)
-- R script.
EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
现在是 R 脚本。我从查询中获得的数据是数字,但对于先验,我需要因子,所以首先我将数据弯曲为因子;
df<-data.frame(x=as.factor("art1"),y=as.factor("art2"))
然后,我可以应用先验:
library("arules");
library("arulesViz");
rules = apriori(df,parameter=list(minlen=2,support=0.05, confidence=0.05));
我需要没有规则格式的数据,只需要对象:
ruledf <- data.frame(
lhs <- labels(lhs(rules)),
rhs <- labels(rhs(rules)),
rules@quality)
a<-substr(ruledf$lhs,7,nchar(as.character( ruledf$lhs))-1)
b<-substr(ruledf$rhs,7,nchar(as.character( ruledf$rhs))-1)
ruledf2<-data.frame(a,b)
'
最后一部分:
, @input_data_1 = N'SELECT * from Data'
, @output_data_1_name = N'ruledf2'
, @input_data_1_name = N'ruledf2';
GO
我不知道我在哪里失败了,因为使用 RODBC 在 R 中做同样的事情来捕获数据库数据,一切正常。
你可以帮帮我吗?提前致谢!
问题出在这里,R脚本这样比较好:
EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
library("arules");
rules = apriori(df[, c("art1", "art2")], parameter=list(minlen=2,support=0.0005, confidence=0.0005));
ruledf <- data.frame(
lhs <- labels(lhs(rules)),
rhs <- labels(rhs(rules)),
rules@quality)
ruledf2<-data.frame(
lhs2<-substr(ruledf$lhs,7,nchar(as.character( ruledf$lhs))-1),
rhs2<-substr(ruledf$rhs,7,nchar(as.character( ruledf$rhs))-1)
)
colnames(ruledf2)<-c("a","b") '
然后它需要有正确的输入和输出:
, @input_data_1 = N'SELECT * from Data'
, @input_data_1_name = N'df'
, @output_data_1_name = N'ruledf2'
所以结果将是这样的 table 命名输出
x y
artA artB
artB artA
...
artY artZ
很有帮助this。
我正在使用 Microsoft SQL Management Studio 2016,使用让我将 R 脚本添加到 SQL 代码中的功能。 我的目标是实现一个 aPriori 算法程序,以我喜欢的方式放置数据,即 table x,第一个对象,y,第二个对象。
我被困在这里,因为我认为我的数据有问题。错误是这样的。
A 'R' script error occurred during execution of 'sp_execute_external_script' with HRESULT 0x80004004.
An external script error occurred: Error in eval(expr, envir, enclos) : bad allocation Calls: source -> withVisible -> eval -> eval -> .Call
这是我的代码。 源数据是 table 两列,如下所示:
A B
a f
f a
b c
...
y z
这里是代码:
GO
create procedure dbo.apriorialgorithm as
-- delete old table
IF OBJECT_ID('Data') IS NOT NULL
DROP TABLE Data
-- create a table that store the query result.
CREATE TABLE Data ( art1 nvarchar(100), art2 nvarchar(100));
-- store the query
INSERT INTO Data ( art1, art2)
select
firstfield as art1,
secondfield as art2
from allthefields
;
IF OBJECT_ID('output') IS NOT NULL
DROP TABLE output
-- create table of the results of the analysis.
CREATE TABLE output (x nvarchar(100), y nvarchar(100));
INSERT INTO output (x, y)
-- R script.
EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
现在是 R 脚本。我从查询中获得的数据是数字,但对于先验,我需要因子,所以首先我将数据弯曲为因子;
df<-data.frame(x=as.factor("art1"),y=as.factor("art2"))
然后,我可以应用先验:
library("arules");
library("arulesViz");
rules = apriori(df,parameter=list(minlen=2,support=0.05, confidence=0.05));
我需要没有规则格式的数据,只需要对象:
ruledf <- data.frame(
lhs <- labels(lhs(rules)),
rhs <- labels(rhs(rules)),
rules@quality)
a<-substr(ruledf$lhs,7,nchar(as.character( ruledf$lhs))-1)
b<-substr(ruledf$rhs,7,nchar(as.character( ruledf$rhs))-1)
ruledf2<-data.frame(a,b)
'
最后一部分:
, @input_data_1 = N'SELECT * from Data'
, @output_data_1_name = N'ruledf2'
, @input_data_1_name = N'ruledf2';
GO
我不知道我在哪里失败了,因为使用 RODBC 在 R 中做同样的事情来捕获数据库数据,一切正常。 你可以帮帮我吗?提前致谢!
问题出在这里,R脚本这样比较好:
EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
library("arules");
rules = apriori(df[, c("art1", "art2")], parameter=list(minlen=2,support=0.0005, confidence=0.0005));
ruledf <- data.frame(
lhs <- labels(lhs(rules)),
rhs <- labels(rhs(rules)),
rules@quality)
ruledf2<-data.frame(
lhs2<-substr(ruledf$lhs,7,nchar(as.character( ruledf$lhs))-1),
rhs2<-substr(ruledf$rhs,7,nchar(as.character( ruledf$rhs))-1)
)
colnames(ruledf2)<-c("a","b") '
然后它需要有正确的输入和输出:
, @input_data_1 = N'SELECT * from Data'
, @input_data_1_name = N'df'
, @output_data_1_name = N'ruledf2'
所以结果将是这样的 table 命名输出
x y
artA artB
artB artA
...
artY artZ
很有帮助this。