2

Rから1つの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]リスト名をシート名に変換する方法にありますか?

4

1 に答える 1

2

あなたはnames(g)どういうわけかあなたの関数に供給しなければならないでしょう。最も単純な解決策は次のようになりmapplyます。

また、何らかの理由で、Excel自体がドットを処理できる場合でも、ExcelODBCドライバーはシート名のドットを好まないようです。そのため、「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()
于 2011-12-14T09:05:12.350 に答える