2016-07-29 1 views
1

Мне нужно знать, почему появляется ошибка упоминания, хотя, когда я заменяю DFinal [i," x "] любым числовым значением, работает отлично Цените ваша помощьОшибка в sqliteSendQuery (con, statement, bind.data): ошибка в инструкции: рядом с "[

for(i in 1:nrow(DFinal)){ 
+  result =0 
+  var1= DFinal[i,"x"] 
+  var2= DFinal[i,"y"] 
+  result <- sqldf(' select count(distinct(V5)) from DLoc where V1= DFinal[i,"x"] and V5 in (select distinct(V5) from DLoc where V1=var2) ') 
+  
+  DFinal[i,"res"]<- result 
+  
+ } 

ошибка в sqliteSendQuery (CON, утверждение, bind.data):. ошибку в утверждении: вблизи "[я," х "]": ошибка синтаксиса

ответ

0

Ваш запрос не имеет никакого смысла, потому что вы имеете в виду переменные R. Вместо этого используйте значения переменных :

for (i in 1:nrow(DFinal)) { 
    result <- 0 
    var1 <- DFinal[i, "x"] 
    var2 <- DFinal[i, "y"] 
    query <- paste0('select count(distinct V5) from DLoc where V1 = ', var1, 
        ' and V5 in (select distinct V5 from DLoc where V1 = ', var2, ')') 
    result <- sqldf(query) 

    DFinal[i, "res"] <- result 
} 

Ваш запрос выглядит так, как будто это может также потребовать некоторого улучшения, но приведенный выше код должен по крайней мере позволить вам запустить его.

Другой комментарий: Как правило, нецелесообразно объединять необработанный SQL-запрос, поскольку он открывает возможность для атаки SQL-инъекции. Но поскольку вы выполняете этот запрос в предположительно закрытой среде R, это может быть нормально, как есть.