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()
Другие вопросы по тегам