ROBDC SqlSave: Как экспортировать данные в таблицы Excel?
Я пытаюсь экспортировать данные из R в один файл 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]
как получить список имен в именах листов?
1 ответ
Решение
Вы должны будете поставить names(g)
к вашей функции как-то. Самое простое решение выглядит так mapply
,
Кроме того, по какой-либо причине драйвер ODBC для Excel, похоже, не любит точки в именах листов, хотя сам 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()