私は自分のデータをMicrosoftSQL2005データベースに保存するオンライン調査を開発しました。Rのデータに対して一連の外れ値チェックを作成しました。これらのスクリプトの一般的なワークフローは次のとおりです。
- sqlQuery()を使用してSQLデータベースからデータを読み取ります
- 外れ値分析を実行する
- sqlSave()を使用して、問題のある回答者を別のテーブルのデータベースに書き戻します。
私が書き戻しているテーブルの構造は次のとおりです。
CREATE TABLE outliers2(
modelid int
, password varchar(50)
, reason varchar(50),
Constraint PK_outliers2 PRIMARY KEY(modelid, reason)
)
GO
ご覧のとおり、主キーをmodelidとreasonに設定しました。同じ回答者が複数のチェックの外れ値である可能性がありますが、どの回答者にも同じmodelidとreasonコンボを挿入したくありません。
まだデータを収集しているので、データに基づいて推定しているモデルを開発するときに、これらのスクリプトを毎日/毎週更新できるようにしたいと思います。sqlSave()
これが私が使用しているコマンドの一般的な形式です:
sqlSave(db, db.insert, "outliers2", append = TRUE, fast = FALSE, rownames = FALSE)
ここdb
で、は有効なODBC接続でdb.insert
あり、次の形式になります。
> head(db.insert)
modelid password reason
1 873 abkd WRONG DIRECTION
2 875 ab9d WRONG DIRECTION
3 890 akdw WRONG DIRECTION
4 905 pqjd WRONG DIRECTION
5 941 ymne WRONG DIRECTION
6 944 okyt WRONG DIRECTION
sqlSave()
主キーの制約に違反し、挿入の他のレコードを続行しない行を挿入しようとすると、チョークします。設定することでこの問題は軽減されると思いましたfast = FALSE
が、そうではありません。
この問題を回避する方法について何かアイデアはありますか?drop
最初のスクリプトの最初はいつでもテーブルを作成できましたが、それはかなり手間がかかるようで、間違いなく今後の問題につながるでしょう。