ROBDC SqlSave: Как экспортировать данные в таблицы Excel? - PullRequest
2 голосов
/ 14 декабря 2011

Я пытаюсь экспортировать данные из 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 Ответ

2 голосов
/ 14 декабря 2011

Вам нужно будет как-то указать 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()
...