2011-12-14 51 views
2

我想數據來自R導出到一個Excel文件(到不同的表):ROBDC SqlSave:如何將數據導出到Excel工作表中?

library(plyr) 
library(RODBC) 

g <- lapply(iris, function(x) as.data.frame(table(x))) 
save2excel <- function(x) sqlSave(xlsFile, 
    x, tablename = x[1], rownames = FALSE) 
xlsFile <- odbcConnectExcel("C:/Temp/iris.xls", readOnly = FALSE) 
l_ply(g, save2excel) 
odbcCloseAll() 

這會產生誤差:

Error in sqlColumns(channel, tablename) : 
    ‘1:35’: table not found on channel 

的問題在於tablename = x[1],如何讓列表名稱轉換爲表格名稱?

回答

2

您必須以某種方式爲您的功能提供names(g)。最簡單的解決方案看起來像mapply

此外,無論出於何種原因,Excel ODBC驅動程序似乎並不喜歡錶名中的點,即使Excel本身可以處理它們。所以你必須改變你的名字,比如「Sepal.Length」到「Sepal_Length」等等。

在全:

g <- lapply(iris, function(x) as.data.frame(table(x))) 
names(g) <- gsub("\\.", "_", names(g)) 
xl <- odbcConnectExcel("c:/temp/iris.xls", readOnly=FALSE) 
mapply(sqlSave, dat=g, tablename=names(g), 
     MoreArgs=list(channel=xl, rownames=FALSE)) 
odbcCloseAll() 
相關問題