R のリストオブジェクトに行列を保存して、そのリストを Excel ファイルに保存することができる。リストの名前が、Excel ファイルのシート名になる。パッケージは XLConnect を利用する。
リストオブジェクトを Excel シートに書き出す関数。
library(XLConnect)
SaveExcel <- function(data.list, file.name = NULL) {
if (is.null(file.name)) stop("File name is invalid.")
if (is.null(names(data.list))) stop("List name is invalid.")
workbook <- loadWorkbook(file.name, create = TRUE)
createSheet(workbook, names(data.list))
writeWorksheet(workbook, data.list, names(data.list), header = TRUE)
saveWorkbook(workbook)
}
データの書き出し。
mat1 <- matrix(rnorm(100), ncol = 4)
mat2 <- matrix(rnorm(100), ncol = 4)
mat3 <- matrix(rnorm(100), ncol = 4)
data.list <- list(Matrix_1 = mat1, Matrix_2 = mat2, Matrix_3 = mat3)
SaveExcel(data.list, "tmp.xlsx")
R で書き出した Excel ファイルは以下のようになる。

for
文で SaveExcel
を繰り返して利用すると、そのうち以下のようなエラーが発生する場合がる。
for (i in 1:1000000) {
SaveExcel(table_data, 'tmp.xlsx')
}
## Error in .jcall("RJavaTools", "Z", "hasMethod", .jcast(x, "java/lang/Object"), :
## java.lang.OutOfMemoryError: Java heap space
この際に gc
関数を for
文のブロックに追加すればエラーがでなくなる。
for (i in 1:1000000) {
gc()
SaveExcel(table_data, 'tmp.xlsx')
}
References
- Function to save R list into separate Excel worksheets. stackoverflow