{xlsx}パッケージについて
{xlsx}パッケージは,ExcelのファイルをRで読み書きするためのパッケージです.
使うには{rJava}パッケージのインストールが必要になります.
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" )