\RequirePackage{color} %\documentclass[pstcol,pdf,baltica,slideColor,colorBG,gyom]{prosper} \documentclass[pstcol,pdf,baltica,slideColor,colorBG,thomasd]{prosper} %\documentclass[pstcol,pdf,baltica,slideColor,colorBG,azure]{prosper} \usepackage{pstricks,pst-node,pst-text,pst-3d} \usepackage{graphics} \usepackage{amsmath, amssymb, amsfonts} \usepackage{multirow} \usepackage{slashbox} \usepackage{fancyheadings} \usepackage{multicol} \usepackage{colortbl} \usepackage{ascmac} \usepackage{latexsym} \usepackage{fancybox} \usepackage[ps2pdf]{hyperref} %% BibTeX 記号定義 \def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}} %% Bibtex 参考文献 to Reference. (英語の時は下のコメントを外す) \renewcommand{\refname}{} %%\renewcommand{\scriptsize}{\@setfontsize\scriptsize{\@vipt}{2\@Q}} \renewcommand\scriptsize{\@setfontsize\scriptsize\@viiipt{1}} \renewcommand{\kanjifamilydefault}{gt} \DefaultTransition{Split} \newcommand{\bibfont}{\scriptsize} \title{ \includegraphics[width=2em]{Rlogo.eps} によるDDBJのアクセス方法} \subtitle{- 2007-06-18 -} \author{Ei-ji Nakama} \email{nakama at com-one.com} \institution{COM-ONE Ltd.} \begin{document} \bf\mathversion{bold}\maketitle %%\bibliographystyle{junsrt} \bibliographystyle{plain} %% ========================== Sweave setting %% 色分け \DefineVerbatimEnvironment{Sinput}{Verbatim}{ formatcom={\color{black}}, frame=none } \DefineVerbatimEnvironment{Scode}{Verbatim}{ formatcom={\color{glay}}, frame=none } \DefineVerbatimEnvironment{Soutput}{Verbatim}{ fontshape=sl, formatcom={\color{red}}, frame=none } %% 行詰め \fvset{listparameters={\setlength{\topsep}{0pt}}} %% ========================= 初期化start =================== <>= options(width=60) options(max.print=5) # 長い文字列の抑止 print<-function(x){ base::print(substring(x,1,getOption("width"))) } # BiBTeX myBibtex<-function(pkg){ if (missing(pkg)){ name <- "R" cita <- citation() }else{ name <- pkg cita <- citation(name) } bib<-gsub("^@([0-9A-z]+)\\{,", paste("@\\1{",name,",",sep=""), unlist(toBibtex(cita))) bib } con<-file("RdeDDBJ2.bib",open="wt") writeLines(myBibtex(),con) writeLines(myBibtex("XML"),con) writeLines(myBibtex("RCurl"),con) writeLines(myBibtex("SSOAP"),con) writeLines(myBibtex("Biobase"),con) close(con) @ %% ========================= 初期化end =================== \begin{slide}[Wipe]{RとXML} \begin{itemize} \item R\cite{R}でXMLを扱うにはXML\cite{XML}パッケージを利用します. \item RのXML\cite{XML}パッケージはlibxml(\url{http://xmlsoft.org/})を使います. \item RのXMLの利用例は少ないですが, libxmlの利用例が参考になります. \item XML-1.9.0以降ではencodingもサポートしました. \item Omegahat\footnote{\url{http://www.omegahat.org/}}にありましたが,現在はCRANにも登録されています. \end{itemize} \end{slide} \begin{slide}[Wipe]{RとXML 例-1} \scriptsize{ <>= library(XML) f <- system.file("exampleData", "mathmlMatrix.xml", package = "XML") doc <- xmlTreeParse(f,useInternalNodes=T) # 内部形式はXPATHが使えます unlist(xpathApply(doc,"//*",xmlName)) sapply(getNodeSet(doc, "/mrow/reln/apply/vector"), saveXML) free(doc) @ } \end{slide} \begin{slide}[Wipe]{RとXML 例-2} \scriptsize{ <>= f <- system.file("exampleData", "mathmlMatrix.xml", package = "XML") doc <- xmlTreeParse(f,useInternalNodes=T) # XPATHでの値の取りだし path <- "/mrow/reln/apply/matrix/matrixrow/cn" unlist(xpathApply(doc, path, xmlValue)) free(doc) @ } \end{slide} \begin{slide}[Wipe]{RとXML 例-3} \scriptsize{ <>= doc<-xmlTreeParse(f,useInternalNodes=T) # 内部形式をXMLに戻します sapply(getNodeSet(doc, "/"), saveXML) free(doc) @ } \end{slide} \begin{slide}[Wipe]{RとXML 例-4} \scriptsize{ <>= doc <- xmlTreeParse(system.file("exampleData", "mtcars.xml", package="XML")) # 内部形式では無い場合 names(xmlRoot(doc)) r <- xmlRoot(doc) r[names(r) == "variables"] @ } \end{slide} \begin{slide}[Wipe]{RとHTTP} \begin{itemize} \item RのRCurl\cite{RCurl}パッケージはlibcurl(\url{http://curl.haxx.se/})を使います. \item RCurl\cite{RCurl}は標準のsocketモジュールが対応していないSSL等も扱えます. \item XML\cite{XML}やSSOAP\cite{SSOAP}と連携して高度なHTTP通信も行えます. \item RCurl\cite{RCurl}はOmegahatから,BioConductor\cite{Biobase}のExtraに供給されています. \end{itemize} \end{slide} \begin{slide}[Wipe]{RとHTTP PROXY設定} RでPROXYを設定する場合はモジュール毎に対応が必要です. <>= library(grid) ## TOP grid.newpage() vp <- viewport(x=0.5,y=0.5,width=1, height=1) pushViewport(vp) grid.rect(gp=gpar(col=0,fill=rgb(.9,.9,.9))) grid.text("R PROXY 概要図", y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="black")) popViewport() pushViewport(viewport(x=.175, y=.48,width=0.3, height=0.85, name="Windows")) grid.rect(gp=gpar(col=0,fill=rgb(.9,.6,.5))) grid.text("internet2", y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="black")) grid.text("(Windows)", y=unit(1, "npc") - unit(2, "lines"), gp=gpar(col="black")) popViewport() pushViewport(viewport(x=.5, y=.48,width=0.3, height=0.85, name="other")) grid.rect(gp=gpar(col=0,fill=rgb(.9,.6,.5))) grid.text("socket module", y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="black")) grid.text("(標準&共通)", y=unit(1, "npc") - unit(2, "lines"), gp=gpar(col="black")) popViewport() pushViewport(viewport(x=.825, y=.48,width=0.3, height=0.85, name="RCurl")) grid.rect(gp=gpar(col=0,fill=rgb(.9,.6,.5))) grid.text("RCurl", y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="black")) grid.text("(libcurl)", y=unit(1, "npc") - unit(2, "lines"), gp=gpar(col="black")) popViewport() pushViewport(viewport(x=.175, y=.4,width=0.28, height=0.64, name="Windows")) grid.rect(gp=gpar(col=0,fill=rgb(.6,.6,.8))) grid.text("IEのPROXY設定を ", y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="black")) grid.text(" 引き継ぐ", y=unit(1, "npc") - unit(2, "lines"), gp=gpar(col="black")) grid.text("(起動オプション ", y=unit(1, "npc") - unit(3, "lines"), gp=gpar(col="black")) grid.text(" ‐‐internet2)", y=unit(1, "npc") - unit(4, "lines"), gp=gpar(col="black")) popViewport() pushViewport(viewport(x=.5, y=.4,width=0.28, height=0.64, name="other")) grid.rect(gp=gpar(col=0,fill=rgb(.6,.6,.8))) grid.text(" 環境変数 ", y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="black")) grid.text("HTTP_PROXY", y=unit(1, "npc") - unit(2, "lines"), gp=gpar(col="black")) grid.text(" 又は ", y=unit(1, "npc") - unit(3, "lines"), gp=gpar(col="black")) grid.text("http_proxy", y=unit(1, "npc") - unit(4, "lines"), gp=gpar(col="black")) popViewport() pushViewport(viewport(x=.825, y=.4,width=0.28, height=0.64, name="RCurl")) grid.rect(gp=gpar(col=0,fill=rgb(.6,.6,.8))) grid.text(" 環境変数 ", y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="black")) grid.text("http_proxy", y=unit(1, "npc") - unit(2, "lines"), gp=gpar(col="black")) popViewport() popViewport(0) @ \\ 例えば、http\_proxy=http://prs.ism.ac.jp:3128/ \end{slide} \begin{slide}[Wipe]{RとSOAP} \begin{itemize} \item R\cite{R}でSOAPを扱うにはSSOAP\cite{SSOAP}パッケージを利用します. \item SSOAP\cite{SSOAP}はXML\cite{XML}とRCurl\cite{RCurl}を必要とします. \item SSOAP\cite{SSOAP}もOmegahatから, BioConductor\cite{Biobase} のExtraに供給されています. \end{itemize} \end{slide} \begin{slide}[Wipe]{RとDDBJ} R\cite{R}でDDBJにアクセスするには,今までにあげた,XML\cite{XML} , RCurl\cite{RCurl},SSOAP\cite{SSOAP}が必要です. \\ DDBJのチュートリアル\footnote{\url{http://www.xml.nig.ac.jp/tutorial/index_jp.html}} \cite{tutorial} に倣って, R版を作成しました. \end{slide} \begin{slide}[Wipe]{RとDDBJ - エントリーの取得1} \scriptsize{ <>= # 1. SSOAP のロード library(SSOAP) # 2. WSDLの指定 url <- "http://xml.nig.ac.jp/wsdl/GetEntry.wsdl" GetEntry <- processWSDL (url) iface <- genSOAPClientInterface(def = GetEntry) # 3. WEBサービスの呼び出し result<-iface@functions$getXML_DDBJEntry("AB000003") # 4. 視覚的な確認 xmlRoot(xmlTreeParse(result)) @ } \end{slide} \begin{slide}[Wipe]{RとDDBJ - エントリーの取得2} \scriptsize{ <>= # ※前の頁の1-2は実行済み # 3. アクセッション番号AB000002-AB000005を一度の実行で取得 acsession <- c("AB000002","AB000003","AB000004","AB000005") # 4. WEBサービスの呼び出し result <- sapply(acsession, iface@functions$getFASTA_DDBJEntry) # 5. 視覚的な確認 print(result) @ } \end{slide} \begin{slide}[Wipe]{SRSとGetEntry、Blast連携1} キーワードとして `prion', Human Division, Molecule`mRNA'を指定します. \scriptsize{ <>= # SSOAP のロード library(SSOAP) # WSDLの指定 SRS <- processWSDL("http://xml.nig.ac.jp/wsdl/SRS.wsdl") SRSiface<-genSOAPClientInterface(def=SRS) # WEBサービスの呼び出し (条件 & は & にすること) result<-SRSiface@functions$searchSimple( "[ddbj-AllText:prion*] & [ddbj-Division:hum] & [ddbj-Molecule:mrna]") print(result) @ } \end{slide} \begin{slide}[Wipe]{SRSとGetEntry、Blast連携2} その結果からコーディング領域のアミノ酸配列を抜き出します(GetEntry). \scriptsize{ <>= # 検索結果を改行で分割し, 配列に格納 id <- unlist(strsplit(result,"\n")) url <- "http://xml.nig.ac.jp/wsdl/GetEntry.wsdl" getentry<-genSOAPClientInterface(def = processWSDL(url)) # アクセッションNo(substringでDDBJ:をサプレス) # sapplyでアクセッションNoを引数にして # DADエントリーをFASTA形式で取得 result<-sapply(substring(id,6), getentry@functions$getFASTA_DADEntry) print(result) @ } \end{slide} \begin{slide}[Wipe]{SRSとGetEntry、Blast連携3} 相同性検索の一つである Blastp を 比較対象 Swiss-plot のデータベースに指定して実行 \scriptsize{ <>= blastiface<-genSOAPClientInterface(def=processWSDL( "http://xml.nig.ac.jp/wsdl/Blast.wsdl")) # blastサービスを呼び出す result<-blastiface@functions$searchParam("blastp", "SWISS", unlist(result), "-m 8") print(result) @ } \end{slide} \begin{slide}[Wipe]{SRSとGetEntry、Blast連携4} 取得したデータを加工する \scriptsize{ <>= # 結果を改行コードで分割する blastline<-unlist(strsplit(result,"\n")) print(blastline[1:3]) # 多いので三つだけ表示 # IDを抜き出す id <- as.vector(sapply(blastline,function(x){ unlist(strsplit(x,"\\|"))[5] })) print(id) @ } \end{slide} \begin{slide}[Wipe]{SRSとGetEntry、Blast連携5} アノテーションをGetEntryで取得し, アクセッション番号, プロテインID, Swiss-Prot ID, プロテインシンボル, プロテインの定義 を表示する. \scriptsize{ <>= # IDからGetUNIPROTEntry取得 entry<-sapply(id, getentry@functions$getUNIPROTEntry) # 空白を圧縮 entry<-gsub("\\s{2,}"," ",entry) # 改行で分割 entry<-strsplit(entry,"\n") print(entry) @ } \end{slide} \begin{slide}[Wipe]{SRSとGetEntry、Blast連携6} 取得データの編集 \scriptsize{ <>= # IDの編集 ID<-sapply(entry, function(x) paste(substring(x[grep("^ID",x)],4),collapse=" ")) # DEの編集 DE<-sapply(entry, function(x) paste(substring(x[grep("^DE",x)],4),collapse=" ")) ENTRY<-cbind(ID,DE) print(ENTRY) @ } \end{slide} \begin{slide}[Wipe]{参考文献} \tiny{ \bibliography{RdeDDBJ2,DDBJ} } \end{slide} \end{document}