2016-10-19 7 views
2

SQLスクリプトにRスクリプトを追加する機能を使用して、Microsoft SQL Management Studio 2016で作業しています。 私の目標は、好きなように、すなわちx、第1のオブジェクト、y、第2のオブジェクトを持つテーブルにデータを入れるaPrioriアルゴリズム手順を達成することです。SQLサーバーとR、データマイニング

私の意見ではデータに問題があるので、私はここにこだわっています。エラーはこれです。

A 'R' スクリプトエラーがHRESULTを0x80004004と 'sp_execute_external_script' の実行中に発生しました。

外部スクリプトエラーが発生しました:evalの中のエラー(exprの、ENVIR、enclos) :悪いアロケーションコール:ソース - > withVisible - >評価 - >評価 - >は.call

ここに私のコードを。

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スクリプト ソースデータは、このような2つの列のテーブルです。クエリから得られるデータは数値ですが、先験的には因子が必要なので、まずデータを因子化するように曲げます。

     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)), 
           [email protected]) 

         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で同じことをしてDBデータをキャッチするので、すべては問題ありません。 私を助けることができますか?前もって感謝します!

答えて

2

問題はここにあった:

Rスクリプトは、このように優れて:だから結果は

 , @input_data_1 = N'SELECT * from Data' 
     , @input_data_1_name = N'df' 
     , @output_data_1_name = N'ruledf2' 

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)), 
           [email protected]) 

         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") ' 

が、それは右の入力と出力を持っている必要がありますこのような出力名のテーブルになる

x y 
artA artB 
artB artA 
... 
artY artZ 

非常に役に立ちました: https://msdn.microsoft.com/en-us/library/mt604368.aspx

関連する問題