獣医師が必死にバイオインフォマティクスPythonによる実践レシピをwin10で動かす(その3)


rpy2によるRの実行(つづき)

ようやく本題に入れる。
Jupyter notebookのマジックコマンドを使ってRを実行する。

from rpy2.robjects import r
from rpy2.robjects.packages import importr
import rpy2.robjects as robjects
import rpy2.robjects.lib.ggplot2 as ggplot2

%load_ext rpy2.ipython

%R seq.data <- read.delim('sequence.index', header=TRUE, stringsAsFactors=FALSE)
%R seq.data$READ_COUNT <- as.integer(seq.data$READ_COUNT)
%R seq.data$BASE_COUNT <- as.integer(seq.data$BASE_COUNT)

my_col = list(seq_data.columns).index("CENTER_NAME")
seq_data['CENTER_NAME'] = seq_data['CENTER_NAME'].apply(lambda x: x.upper())

%load_ext rpy2.ipythonでなんか怒られる
C:\Users\mokim\anaconda3\envs\win_bioinfo\lib\site-packages\rpy2-2.9.0-py3.6-win-amd64.egg\rpy2\robjects\pandas2ri.py:14: FutureWarning: pandas.core.index is deprecated and will be removed in a future version. The public classes are available in the top-level namespace.
from pandas.core.index import Index as PandasIndex

要約するとこのpandasの使い方は良くないから、良い方にしたらというサジェストらしい
知らんがな、執筆者に言ってくれと思いながら華麗にスルー
この%load_ext rpy2.ipythonを宣言することで%Rと記載するとその一行はR側のコードして解釈されるみたい

続いて実行。

%R -i seq_data
%R print(colnames(seq_data))

ここの-iはマジックシステムにPython側の変数をR側にコピーすることを示しているらしい

本格的にデータをグラフィック化していく

%%R
seq_data <- seq_data[seq_data$WITHDRAWN==0, ]
seq_data$POPULATION <- as.factor(seq_data$POPULATION)

bar <- ggplot(seq_data) +  aes(factor(CENTER_NAME)) + geom_bar() + theme(axis.text.x = element_text(angle = 90, hjust = 1))

seq_data$POPULATION <- as.factor(seq_data$POPULATION)
yri_ceu <- seq_data[seq_data$POPULATION %in% c("YRI", "CEU") & seq_data$BASE_COUNT < 2E9 & seq_data$READ_COUNT < 3E7, ]

scatter <- ggplot(yri_ceu, aes(x=BASE_COUNT, y=READ_COUNT, col=factor(ANALYSIS_GROUP), shape=POPULATION)) + geom_point()

library(gridExtra)
library(grid)
g <- grid.arrange(bar, scatter, ncol=1)
png('fig.png')
plot(g)
dev.off()

毎回%Rと書くのしんどいと思っていたら、最初に%%Rと宣言するとそこの終わりまでRコードとして認識されるらしい
ただし、%load_ext rpy2.ipythonの宣言後には%%Rは効力を持たなかった
Jupyter notebookの仕様?
宣言が同一空間内にあることによる記述の混乱を避けるため?
ちなみにここで画像の出力をするための原著のコードは

png('fig.png')
g
dev.off()

となっているが、おかしい
グラフィックエリアに記述しないと画像がpngの中に保存されないはず。
もしかしてMac, Linuxでは記述されるのだろうか?
誰か知っている人教えてください