2013-11-21 3 views
4

У меня проблема с SQLdf. Хотя я пытаюсь обновить таблицу, она всегда дает NULL в качестве вывода. Я делаю красные вещи об этой проблеме, но я не могу понять, как ее решить. Мой код:Функция обновления sqldf R Язык

fn$sqldf("update cons set V1='%$numbernew%' where V1=$'contact'") 

Но после того, как я проверить его, чтобы увидеть, если что-то изменилось, все такие же, как в начале. Любые идеи помогут.

+2

Сканирование часто задаваемые вопросы для пакет иногда может быть [полезным] (https://code.google.com/p/sqld е/# 8._Why_am_I_having_problems_with_update?). – joran

+0

Я знаю, но не о аргументах. Это проблема, которая возникает иногда, и она имеет какое-то отношение к пакету sqldf, что не позволяет легко обновлять таблицу ... – Tony

ответ

6

Поскольку Joran упоминается в комментарии, этот вопрос является часто задаваемым sqldf. Фактически его sqldf FAQ #8.

Как обсуждалось, проблема в том, что вы попросили обновить таблицу, но никогда не просили ее вернуть таблицу. Также $'contract' должен быть '$contract', так как вы хотите заменить его на contract, а затем объединить эту замену одинарными кавычками.

# set up test data for reproduciblity 
con <- data.frame(V1 = c("a", "b", "c")) 
contract <- "a" 
numbernew <- "x" 

Теперь, когда у нас есть некоторые данные, попробуйте следующее:

sql1 <- fn$identity("update con set V1 ='%$numbernew%' where V1 = '$contract' ") 
sql2 <- "select * from main.con" 
sqldf(c(sql1, sql2)) 

Результат:

V1 
1 %x% 
2 b 
3 c 

Это будет работать тоже:

sqldf() # start a sequence of SQL statements 

fn$sqldf("update con set V1 ='%$numbernew%' where V1 = '$contract' ") 
ans <- sqldf("select * from main.con") 

sqldf() # SQL statements finished 
+0

Эй, благодарю вас за ответ. У меня действительно был «контакт». Я просто отредактировал это неправильно здесь. Моя проблема (после некоторого времени поиска) заключается в том, что переменная numbernew содержит символы типа; : и т. д., которые могут быть распознаны командой sql как команды. ЛЮБАЯ идея, как с этим справиться? – Tony

+0

Строковые литералы могут содержать специальные символы. Если они содержат одинарные кавычки, то удваивайте их, например. '' Пицца Джо ' –

+0

А что? а также . ?? – Tony

Смежные вопросы