R sqldf - индекс внутри / снаружи цикла

screechOwl спросил: 13 октября 2017 в 06:51 в: r

Я использую функцию sqldf для многократного объединения подмножеств таблицы против себя. Процесс повторения происходит внутри цикла for. Я читал, что добавление индекса может улучшить производительность этих объединений здесь.

Мой вопрос - если я повторяю это в цикле, означает ли это, что я должен воссоздавать индекс каждый раз, когда цикл выполняется или есть способ сделать индекс "постоянным" вне цикла, но использоваться внутри цикла?

Другими словами, я видел только эту версию:

for(i in 1:10){
   df1 <- sqldf(c('create index...','select * from table1'))
}

Есть ли способ сделать что-то вроде этого:

df1 <- sqldf('create index...') # create index outside of loopfor(i in 1:10){
   df2 <- sqldf('select * from t1 left join t2 on t1.col1 = t2.col1')
}

EDIT:

> sqldf() 
NULL
> 
> sqldf("create index idx on iris(Species)") ## 
data frame with 0 columns and 0 rows
> sqldf("select count(*) from main.iris where Species = 'virginica'") ##
Error in rsqlite_send_query(conn@ptr, statement) : 
  no such table: main.iris
> sqldf("select count(*) from main.iris where Species <> 'virginica'") ##
Error in rsqlite_send_query(conn@ptr, statement) : 
  no such table: main.iris
> 
> sqldf()
<SQLiteConnection>
  Path: :memory:
  Extensions: TRUE
> 

EDIT_2:

> sqldf() 
NULL
> # close an old connection if it exists
>    if (!is.null(getOption("sqldf.connection"))) sqldf()
> sqldf() 
<SQLiteConnection>
  Path: :memory:
  Extensions: TRUE
> sqldf("create index idx on iris(Species)") ## 
data frame with 0 columns and 0 rows
> sqldf("select count(*) from main.iris where Species = 'virginica'") ##
  count(*)
1       50
> sqldf("select count(*) from main.iris where Species <> 'virginica'") ##
  count(*)
1      100
> sqldf() 
NULL


0 ответов