2017-01-11 59 views
0

導入Access表,這可能是簡單的東西,但我不能想出一個可行的解決方案。[R用戶定義函數通過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 

我建立一個功能,通過ODBC導入從Access數據庫文件,便接踵而來:

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因爲功能紅外線分配給本地對象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