Функция обновления sqldf R Language

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

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

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


person Tony    schedule 21.11.2013    source источник
comment
Сканирование часто задаваемых вопросов для пакета иногда может быть полезно.   -  person joran    schedule 21.11.2013
comment
Я знаю, но дело не в аргументах. Это проблема, которая иногда возникает, и она как-то связана с пакетом sqldf, который не позволяет легко обновлять таблицу...   -  person Tony    schedule 21.11.2013


Ответы (1)


Как упомянул Джоран в комментарии, этот вопрос является часто задаваемым вопросом по sqldf. На самом деле это Часто задаваемые вопросы по SQLDF #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
person G. Grothendieck    schedule 21.11.2013
comment
Эй, спасибо за ответ. У меня был правильный «$ контакт». Я просто неправильно отредактировал это здесь. Моя проблема (после некоторого времени поиска) заключается в том, что переменная numbernew содержит такие символы, как ; : etc, которые могут быть распознаны sql как команды. Есть идеи, как с этим бороться? - person Tony; 22.11.2013
comment
Строковые литералы могут содержать специальные символы. Если они содержат одинарные кавычки, удвойте их, например. 'Joe''s Pizza' - person G. Grothendieck; 22.11.2013
comment
Что о ? и . ?? - person Tony; 22.11.2013
comment
Они оба должны работать. Попробуйте: sqldf("select '?', '??', 'Joe''s Pizza' ") - person G. Grothendieck; 22.11.2013
comment
В общем моя функция читает строки из .vcf файла (телефонные контакты). Все, что я хочу сделать, это использовать выражения SQL для экспорта чего-либо из списка и т. д. Но, как видно из файла .vcf, номера телефонов записываются в строки, которые начинаются с TEL;TYPE=CELL и т. д. Поэтому, когда я хочу чтобы сделать обновления в телефоне, мне нужно вставить всю строку, содержащую телефон и указанный выше TEL... Поэтому, когда я делаю это с помощью команд SQLdf (как вы указали), это говорит что-то, что столбец TEL не существует. что-то вроде этого ... - person Tony; 22.11.2013
comment
Это не ясно. Возможно, вы захотите начать еще один вопрос с воспроизводимым вводом и выводом. - person G. Grothendieck; 22.11.2013