2011-12-14 73 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()