2017-01-11 1 views
0

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

Моя установка:

R version 3.3.1 (2016-06-21) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows >= 8 x64 (build 9200) 

locale: 
[1] LC_COLLATE=Portuguese_Brazil.1252 LC_CTYPE=Portuguese_Brazil.1252 LC_MONETARY=Portuguese_Brazil.1252 LC_NUMERIC=C      
[5] LC_TIME=Portuguese_Brazil.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

loaded via a namespace (and not attached): 
[1] tools_3.3.1 rpart_4.1-10 

Я строю функция импорта файлов из БД ACCESS через ODBC, как Folow:

importa.sql <- function(someFile) 
    { 
    library(RODBC) 
    con <- odbcConnect("someTable") 
    qry<-paste("(","SELECT * FROM ",someFile,")") 
    someFile <- sqlQuery(con,qry,stringsAsFactors=FALSE) 
    } 

Я проверил каждую строку и код работает как и ожидалось. Проблема в том, что когда я запускаю функцию, она работает отлично, но нет файла, импортированного !!!

Может кто-нибудь мне помочь?

ответ

0

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

Просто вызвать функцию так:

file <- importa.sql(someFile) 
1

Ваша функция возвращает NULL, потому что последний оператор функции ir присваивает локальному объекту someFile. Было бы неплохо закрыть соединение. Попробуйте эту функцию.

importa.sql <- function(someFile) { 
    library(RODBC) 
    con <- odbcConnect("someTable") 
    qry <- paste("(", "SELECT * FROM ", someFile, ")") 
    df <- sqlQuery(con, qry, stringsAsFactors = FALSE) 
    close(con) 
    return(df) 
} 
+1

Явное 'return' является необязательным; вы можете вызывать 'sqlQuery' без присвоения вывода или просто изменить окончательную строку на' df'. В зависимости от того, кого вы спрашиваете, это предпочтительный стиль для окончательной или не-ошибки возврата функции. Проверьте: http://adv-r.had.co.nz/Functions.html#return-values. Это отличное руководство для написания функций. – blongworth

+0

Спасибо @djhurio за ответ. Я уже тестировал его с помощью {return}, но я не хотел, чтобы он показывал мне результат на консоли, просто для генерации data.frame. Я нашел решение, которое я просто пишу ниже. – Marcelo

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