LoginSignup
20
23

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-10-14

{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" )

参考文献

20
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
23