RでExcelのファイルを読み書きする{xlsx}パッケージの使い方

  • 18
    Like
  • 0
    Comment
More than 1 year has passed since last update.

{xlsx}パッケージについて

{xlsx}パッケージは,ExcelのファイルをRで読み書きするためのパッケージです.
使うには{rJava}パッケージのインストールが必要になります.

xlsxファイルの読み込み

xlsxファイルの読み込み
library(xlsx)

# test.xlsxの1番目のシートの1,2,5列目のデータをデータフレームとして読み込む
dat <- read.xlsx("test.xlsx", sheetIndex=1, colIndex=c(1,2,5))

xlsxファイルの書き出し(シンプルな方法)

単純にデータフレームを書き出すだけならwrite.xlsx()でできます.

df <- data.frame(gene_symbol=c("OCT4\n(POU5F1)", "SOX2", "KLF4", "C-MYC"), expression=c(1,6,9,4))
write.xlsx(df, file="test.xlsx", sheetName="sheet1", row.names=F)

この方法はシンプルですが,セルの書式設定など高度な設定はできません.
例えば,上の例で作成したxlsxファイルをExcelで開いても,OCT4\n(POU5F1)はセル内改行とは認識されません.

xlsxファイルの書き出し(複雑なことができる方法)

workbookオブジェクト,sheetオブジェクト,CellStyleオブジェクトを作成することで,より高度なxlsxファイルを作成することができます.

df <- data.frame(gene_symbol=c("OCT4\n(POU5F1)", "SOX2", "KLF4", "C-MYC"), expression=c(1,6,9,4))
# workbookオブジェクトの作成
wb <- createWorkbook(type="xlsx")
# シート名が"sheet1"であるsheetオブジェクトの作成
sheet <- createSheet(wb, sheet="sheet1")
# sheetオブジェクトにデータフレームを入力
addDataFrame(iris, sheet, startColumn=1)
# シート名が"sheet2"であるsheetオブジェクトの作成
sheet <- createSheet(wb, sheet="sheet2")
# CellStyleオブジェクトの作成(wrapTextは「セル内でテキストを折り返す」)
cs1 <- CellStyle(wb) + Alignment(wrapText=T) + DataFormat("@")
# sheetオブジェクトにデータフレームを入力
addDataFrame(df, sheet, startColumn=1, row.names=F, colStyle=list(`1`=cs1))
# Excelファイルを出力("sheet1","sheet2"という2つのシートを持つ)
saveWorkbook(wb, file="test.xlsx")

この例では,sheet2では,"OCT4\n(POU5F1)"はセル内改行として認識されます.

CellStyleについては,かなり細かい設定ができます.詳しくは,?CellStyleでヘルプを参照してください.
ただし,細かい設定をするには,ExcelをVBAで操作する際の知識が必要となります(ググる程度).
例えば,DataFormat("@")"@"はVBAでセルの書式を「文字列」にする際の指定です.

ヒープサイズの設定

read.xlsx()を使う際にjava.lang.OutOfMemoryError: Java heap spaceというエラーが出ることがあります.
これを防ぐためには,以下のようにヒープサイズの設定をJVMの初期化の前に(library(xlsx)の前に)行うことが有効です(http://www.bramschoenmakers.nl/en/node/726).

ヒープサイズの設定
options( java.parameters = "-Xmx4g" )

参考文献