1

正常に機能した SQL クエリが多数ありますが、何らかの理由で機能しなくなりました。データは変更されていません。コードは変更されていません。

次のエラー メッセージが表示され続けます。

rsqlite_send_query(conn@ptr, statement) のエラー: 列名が重複しています: Ret

これらのエラーは、左結合で発生する傾向があります。以下に例を示します。

 g.cper<-sqldf("select a.*, b.NAV_EUR, b.AUM_EUR
           from g2_c as a
            left join 
            nav_master as b
            on a.fund_id=b.fund_id and a.period = b.period")

問題のテーブルには、「Ret」という名前の変数が含まれていません

最近、すべてのパッケージを更新しました。

これはレガシー コードです。可能な場合は dplyr::left_join を使用する傾向があります。しかし、 left_join は、SQL の左結合が達成できること (制約としての不等式など) を決して行いません。

これらは私がロードするパッケージです:

パッケージ <- c("ISLR","gam","biglm","dplyr","gtools","tidyr", "randomForest","splines", "tree", "pROC","lfe"," lubridate"、"stargazer"、"scales"、"ggplot2"、"scales"、"data.table"、"zoo"、"PerformanceAnalytics"、"stats"、"proto"、"timeSeries"、"timeDate"、" gsubfn"、"fBasics"、"DBI"、"RSQLite"、"sqldf"、"RODBC"、"tcltk"、"reshape"、"xts"、"data.table"、"parallel"、"lfe"、" readr"、"purrr"、"tibble"、"hms"、"stringr"、"lubridate"、"forcats")

これは私のセッション情報です ():

sessionInfo() R バージョン 3.3.3 (2017-03-06) プラットフォーム: x86_64-redhat-linux-gnu (64 ビット) 実行環境: Red Hat Enterprise Linux Server 7.3 (Maipo)

ロケール: 1 LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
LC_TIME=en_US.UTF-8 [4] LC_COLLATE=en_US.UTF-8
LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=en_US .UTF-8 LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

付属の基本パッケージ: 1 つの並列 tcltk スプライン stats
グラフィックス grDevices utils データセット メソッド base

その他の添付パッケージ: 1 forcats_0.2.0
stringr_1.2.0 hms_0.3 [4] tibble_1.2 purrr_0.2.2
readr_1.0.0 [7] reshape_0.8.6
RODBC_1.3-14 sqldf_0.4-10 [10] RSQLite_1.1-2 fBasics_3011.87
gsubfn_0.6-6 [13] timeSeries_3022.101.2
timeDate_3012.100 proto_1.0.0 [16] PerformanceAnalytics_1.4.3541 xts_0.9-7 Zoo_1.7-14 [19] data.table_1.10.4 ggplot2_2.2.1
scales_0.4.1 [22]
stargazer_5.2 lubridate_1.6.0 lfe_2.5-1998 [25] Matrix_1.2-8 pROC_1.9.1
tree_1.0-37 [28] randomForest_4.6-12
tidyr_0.6.1 gtools_3.5.0 [31] dplyr_0.5.0 biglm_0.9-1 DBI_0.5-1 [34] gam_1.14 foreach_1.4.3
ISLR_1.0

名前空間を介してロードされた (アタッチされて いない
) :
.3 Rcpp_0.12.9 xtable_1.8-2 [13] digest_0.6.12 stringi_1.1.2 grid_3.3.3 tools_3.3.3 Sandwich_2.3-4
magrittr_1.5 [19] lazyeval_0.2.0 Formula_1.2-1 assertthat_0.1 iterators_1.0.8 R6_2.2.0

これがこの質問に関連しているかどうかわからないRSQLite_1.1-2 (2.0より前) を使用していることを覚えておいてください

正直なところ、何が起こっているのかわからず、オンラインで何も見つかりませんでした...

更新 I: sqldf_0.4-11 および RSQLite_2.0 にアップグレードしました....それでもこの問題が発生します。また、sqldf (および依存関係) をロードしようとしました...コードはまだ機能しません

更新 II:まず、 G. Grothendieck氏のこの問題への支援と、長年にわたる R への貢献に感謝したいと思います。

この特定の問題について、mtcars を使用してテスト クエリを実行しようとしました。これはコードです:

b<- sqldf("select a.*, b.mpg as test from mtcars as a left join mtcars as b on a.mpg=b.mpg")

このクエリは機能しました!!! . 次に、sqldf 0.4.11 および RSQLite 2.0 に更新した後でも機能しなかったコードを実行します (更新 I を参照)。驚いたことに、動作するようになりました!!!...何が起こったのかわかりませんが、すべての sqldf クエリが動作するようになりました。参考までに...私はAWSで働いています............説明できない奇妙なことが時々起こります....

更新 III問題が戻ってきました。そこで、アップデート II でテスト コードを再度実行します。これは機能します。そして、そのテスト コードを実行した後、すべての sqldf 結合が再び機能します。

4

1 に答える 1

0

この再現可能な例 (sqldf 0.4.11 と RSQLiute 2.0 を使用) では、期待どおりに動作します。https://stackoverflow.com/help/how-to-askhttps://stackoverflow.com/help/mcveを確認してください。

library(sqldf)

g2_c <- nav_master <- data.frame(fund_id = 1:2, period = 1:2, NAV_EUR = 0, AUM_EUR = 0)
sqldf("select a.*, b.NAV_EUR, b.AUM_EUR
       from g2_c as a
       left join nav_master as b
         on a.fund_id=b.fund_id and a.period = b.period")

与える:

  fund_id period NAV_EUR AUM_EUR NAV_EUR AUM_EUR
1       1      1       0       0       0       0
2       2      2       0       0       0       0
于 2017-07-13T12:05:03.390 に答える