<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <title> document_view — bioconductor.org </title> <base href="http://bioconductor.fhcrc.org/workshops/2002/Seattle02/Lab3.Rnw" /> <meta name="generator" content="Plone - http://plone.org" /> <meta content="admin" name="DC.creator" /> <meta content="2005-07-01 10:23:37" name="DC.date.created" /> <meta content="2005-07-01 10:23:38" name="DC.date.modified" /> <meta content="Document" name="DC.type" /> <meta content="text/plain" name="DC.format" /> <!-- Basic crude style for Netscape4.x - This can be removed if you don't want the special NS4 look - it will still work, just be plain text instead. Column layout for Netscape4.x included --> <link rel="Stylesheet" type="text/css" href="http://bioconductor.fhcrc.org/ploneNS4.css" /> <!-- Column style sheet. --> <style type="text/css" media="screen"><!-- @import url(http://bioconductor.fhcrc.org/ploneColumns.css); --></style> <!-- Main style sheets for CSS2 capable browsers --> <style type="text/css" media="screen"><!-- @import url(http://bioconductor.fhcrc.org/plone.css); --></style> <!-- Old style sheet from Plone 1.0, remove tal:condition="nothing" if you need to use the old styles. Will be removed in Plone 2.1. --> <!-- Alternate style sheets for the bigger/smaller text switcher --> <link rel="alternate stylesheet" type="text/css" media="screen" href="http://bioconductor.fhcrc.org/ploneTextSmall.css" title="Small Text" /> <link rel="alternate stylesheet" type="text/css" media="screen" href="http://bioconductor.fhcrc.org/ploneTextLarge.css" title="Large Text" /> <!-- Style sheet used for printing --> <link rel="stylesheet" type="text/css" media="print" href="http://bioconductor.fhcrc.org/plonePrint.css" /> <!-- Style sheet used for presentations (Opera is the only browser supporting this at the moment) --> <link rel="stylesheet" type="text/css" media="projection" href="http://bioconductor.fhcrc.org/plonePresentation.css" /> <!-- Internet Explorer CSS Fixes --> <!--[if IE]> <style type="text/css" media="all">@import url(http://bioconductor.fhcrc.org/ploneIEFixes.css);</style> <![endif]--> <!-- Custom style sheet if available --> <style type="text/css" media="all"><!-- @import url(http://bioconductor.fhcrc.org/ploneCustom.css); --></style> <link rel="shortcut icon" href="http://bioconductor.fhcrc.org/favicon.ico" type="image/x-icon" /> <link rel="search" href="http://bioconductor.fhcrc.org/search_form" title="Search this site" /> <link rel="up" href="http://bioconductor.fhcrc.org/workshops/2002/Seattle02" title="Up one level" /> <!-- Disable IE6 image toolbar --> <meta http-equiv="imagetoolbar" content="no" /> <!-- A slot where you can insert CSS in the header from a template --> <!-- min-width support for IE via Javascript, required for tableless --> <!--[if IE]> <script type="text/javascript" src="http://bioconductor.fhcrc.org/plone_minwidth.js"></script> <![endif]--> <!-- A slot where you can insert elements in the header from a template --> <!-- A slot where you can insert javascript in the header from a template --> <!-- Common Plone ECMAScripts --> <!-- Pull-down ECMAScript menu, only active if logged in --> <!-- old google analytics here --> <!-- Define dynamic server-side variables for javascripts in this one --> <script type="text/javascript" src="http://bioconductor.fhcrc.org/plone_javascript_variables.js"> </script> <script type="text/javascript" src="http://bioconductor.fhcrc.org/plone_javascripts.js"> </script> <!-- Old JS from Plone 1.0, remove tal:condition="nothing" if you need to use the old pop-ups. Will be removed in Plone 2.1 --> </head> <body class="section-workshops"> <div id="visual-portal-wrapper"> <div id="portal-top"> <a href="#documentContent" class="hiddenStructure">Skip to content.</a> <h1 id="portal-logo"> <a href="http://bioconductor.fhcrc.org">bioconductor.org</a> </h1> <div id="portal-slogan"><p>Bioconductor is an open source and open development software project<br /> for the analysis and comprehension of genomic data.</p></div> <h5 class="hiddenStructure">Sections</h5> <ul id="portal-globalnav"><li id="portaltab-index_html" class="plain"><a href="http://bioconductor.fhcrc.org" accesskey="t">Home</a></li><li id="portaltab-GettingStarted" class="plain"><a href="http://bioconductor.fhcrc.org/GettingStarted" accesskey="t">Getting Started</a></li><li id="portaltab-overview" class="plain"><a href="http://bioconductor.fhcrc.org/overview" accesskey="t">Overview</a></li><li id="portaltab-download" class="plain"><a href="http://bioconductor.fhcrc.org/download" accesskey="t">Downloads</a></li><li id="portaltab-docs" class="plain"><a href="http://bioconductor.fhcrc.org/docs" accesskey="t">Documentation</a></li><li id="portaltab-biocpub" class="plain"><a href="http://bioconductor.fhcrc.org/pub" accesskey="t">Publications</a></li><li id="portaltab-workshops" class="selected"><a href="http://bioconductor.fhcrc.org/workshops" accesskey="t">Workshops</a></li><li id="portaltab-cabig" class="plain"><a href="http://wiki.fhcrc.org/caBioc" accesskey="t">caBIG</a></li></ul> </div> <div class="visualClear"></div> <!-- The wrapper div. It contains the three columns. --> <div id="portal-columns" class="visualColumnHideNone"> <!-- start of the main and left columns --> <div id="visual-column-wrapper"> <!-- start of main content block --> <div id="portal-column-content" class="topmargin1"> <div id="content" class=""> <div class="documentContent" id="region-content"> <a name="documentContent"></a> <h1 class="documentFirstHeading">Lab3.Rnw</h1> <div class="documentDescription"></div> <div class="plain"> <p>% % NOTE -- ONLY EDIT THE .Rnw FILE!!! The .tex file is % likely to be overwritten. % % \VignetteIndexEntry{Seattle Lab 3} %\VignetteDepends{Biobase. golubEsets, ellipse,lattice, mva, MASS,cluster } %\VignetteKeywords{Microarray} \documentclass<a href="#ref12pt">[12pt]</a>{article}</p> <p>\usepackage{amsmath,pstricks} \usepackage<a href="#refauthoryear,round">[authoryear,round]</a>{natbib} \usepackage{hyperref}</p> <p>\textwidth=6.2in \textheight=8.5in %\parskip=.3cm \oddsidemargin=.1in \evensidemargin=.1in \headheight=-.3in</p> <p>\newcommand{\scscst}{\scriptscriptstyle} \newcommand{\scst}{\scriptstyle}</p> <p>\bibliographystyle{plainnat}</p> <p>\title{Cluster Analysis Using R and Bioconductor}</p> <p>\begin{document}</p> <p>\maketitle</p> <p>We continue our extended example involving the dataset from \citet{Golub99}. In this lab, we will compute distances between tumor samples and use multidimensional scaling to represent these distances. We will then consider different procedures for clustering tumor samples.</p> <p><<loadlibs>>= library(Biobase) library(annotate) library(golubEsets) library(genefilter) library(ellipse) library(lattice) library(cluster) library(mva) @</p> <p>We will set up the data from scratch once again.</p> <p><<setup>>= X<-exprs(golubTrain) X[X<100]<-100 X[X>16000]<-16000</p> <p>mmfilt <- function(r=5, d=500, na.rm=TRUE) { function(x) { minval <- min(x, na.rm=na.rm) maxval <- max(x, na.rm=na.rm) (maxval/minval > r) && (maxval-minval > d) } }</p> <p>mmfun <- mmfilt()</p> <p>ffun <- filterfun(mmfun) sub <- genefilter(X, ffun ) sum(sub) ## Should get 3051</p> <p>X <- X<a href="#refsub,">[sub,]</a> X <- log2(X) golubTrainSub<-golubTrain<a href="#refsub,">[sub,]</a> golubTrainSub@exprs <- X</p> <p>Y <- golubTrainSub$ALL.AML</p> <p>Y<-paste(golubTrain$ALL.AML,golubTrain$T.B.cell) Y<-sub("NA","",Y)</p> <p>@</p> <p>Now that the data are set up, we are ready to compute distances between tumor samples and apply clustering procedures to these samples.</p> <p>\section{Distances}</p> <p>We first compute the correlation distance between the 38 tumor samples from the training set, using all 3,051 genes retained after the above filtering procedure.</p> <p>%%FIXME: other distances?</p> <p><<cordist>>= r<-cor(X) dimnames(r)<-list(as.vector(Y),as.vector(Y)) d<-1-r @</p> <p>We rely on the \texttt{plotcorr} function from the \textit{ellipse} package and the \texttt{levelplot} function from \textit{lattice} for displaying this 38 $\times 38$ distance matrix.</p> <p><<plotcorr1,fig=TRUE>>= plotcorr(r, main="Leukemia data: Correlation matrix for 38 mRNA samples\n All 3,051 genes") @</p> <p><<plotcorr2,fig=TRUE>>= plotcorr(r,numbers=TRUE, main="Leukemia data: Correlation matrix for 38 mRNA samples\n All 3,051 genes") @</p> <p><<levelplot>>= levelplot(r,col.region=heat.colors(50), main="Leukemia data: Correlation matrix for 38 mRNA samples\n All 3,051 genes") @</p> <p>\section{Multidimensional Scaling}</p> <p>We now turn to {\em multidimensional scaling} (MDS) for representing the tumor sample distance matrix. MDS is a data reduction method that is appropriate for general distance matrices. It is much like principal component analysis (PCA), but it is not the same -- except for Euclidean distances. Given an $n \times n$ distance matrix, MDS is concerned with identifying $n$ point in Euclidean space with a {\em similar} distance structure. The purpose is to provide a graphical representation of the distances which conveys information on the relationships between objects, such as the existence of clusters or one-dimensional structure in the data (e.g., seriation). </p> <p><<mds2,fig=TRUE>>= mds<- cmdscale(d, k=2, eig=TRUE) plot(mds$points, type="n", xlab="", ylab="", main="MDS for ALL AML data, correlation matrix, G=3,051 genes, k=2") text(mds$points<a href="#ref,1">[,1]</a>,mds$points<a href="#ref,2">[,2]</a>,Y, col=codes(factor(Y))+1, cex=0.8) @</p> <p><<mds3,fig=TRUE>>= mds<- cmdscale(d, k=3, eig=TRUE) pairs(mds$points, main="MDS for ALL AML data, correlation matrix, G=3,051 genes, k=3", pch=c("B","T","M")[codes(factor(Y))], col = codes(factor(Y))+1) @</p> <p>Note, if we are measuring distances between samples on the basis of $G=3,051$ probes then we are essentially looking at points in 3,051 dimensional space. As with PCA, the quality of the representation will depend on the magnitude of the first $k$ eigenvalues. To assess how many components there are, a \textit{scree} plot similar to that used for principal components can be created. This plot of the eigenvalues suggests that much of the information is contained in the first component. One might consider using either three or four components as well.</p> <p><<scree,fig=TRUE>>= mdsScree <- cmdscale(d, k=8, eig=TRUE) plot(mdsScree$eig, pch=18, col="blue") @</p> <p>\section{Hierarchical Clustering}</p> <p>We can use the \texttt{hclust} function in the \textit{mva} package for {\em agglomerative hierarchical clustering}. We consider the following agglomeration methods, i.e., methods for computing {\em between cluster distances}: </p> <p>\begin{description} \item[Single linkage] The distance between two clusters is the minimum distance between any two objects, one from each cluster. \item[Average linkage] The distance between two clusters is the average of all pairwise distances between the members of both clusters. \item[Complete linkage] The distance between two clusters is the maximum distance between two objects, one from each cluster. \end{description}</p> <p>The nested sequence of clusters resulting from hierarchical clustering methods can be represented graphically using a dendrogram. A {\em dendrogram} is a binary tree diagram in which the terminal nodes, or leaves, represent individual observations and in which the height of the nodes reflects the dissimilarity between the two clusters that are joined. While dendrograms are quite appealing because of their apparent ease of interpretation, they can be misleading. </p> <p>First, the dendrogram corresponding to a given hierarchical clustering is not unique, since for each merge one needs to specify which subtree should go on the left and which on the right. For $n$ observations, there are $n-1$ merges and hence $2^{(n-1)}$ possible orderings of the terminal nodes. Therefore, $2^{(n-1)}$ different dendrograms are consistent with any given sequence of hierarchical clustering operations. The ordering is of practical importance because it will result in different genes being placed next to each other in the heat-maps and possibly different interpretations of the same data. A number of heuristics have been suggested for ordering the terminal nodes in a dendrogram. The default in the R function \texttt{hclust} from the \textit{cluster} package is to order the subtrees so that the tighter cluster is on the left (i.e., the most recent merge of the left subtree is at a lower value than the last merge of the right subtree). </p> <p>A second, and perhaps less recognized shortcoming of dendrograms, is that they {\em impose} structure on that data, instead of {\em revealing} structure in these data. Indeed, dendrograms are often viewed as graphical summaries of the data, rather than of the results of the clustering algorithm. Such a representation will be valid only to the extent that the pairwise dissimilarities possess the hierarchical structure imposed by the clustering algorithm. Note that in particular, the same matrix of pairwise distances between observations will be represented by a different dendrogram depending on the distance function that is used to compute between-cluster distances (e.g., complete or average linkage). The {\em cophenetic correlation coefficient} can be used to measure how well the hierarchical structure from the dendrogram represents the actual distances. This measure is defined as the correlation between the $n(n-1)/2$ pairwise dissimilarities between observations and their {\em cophenetic} dissimilarities from the dendrogram, i.e., the between cluster dissimilarities at which two observations are first joined together in the same cluster. \\ </p> <p>Next, we apply three agglomerative hierarchical clustering methods to cluster tumor samples. For each methods, we plot a dendrogram, compute the corresponding cophenetic correlation, and compare the three clusters obtained from cutting the tree into three branches to the actual tumor labels (ALL B-cell, ALL T-cell, and AML).</p> <p><<average,fig=TRUE>>= hc1 <- hclust(as.dist(d), method="average") coph1<-cor(cophenetic(hc1),as.dist(d)) </p> <p>plot(hc1, main=paste("Dendrogram for ALL AML data: Coph = ", round(coph1,2)), sub="Average linkage, correlation matrix, G=3,051 genes") </p> <p>cthc1 <- cutree(hc1, 3) table(Y, cthc1)</p> <p>@</p> <p><<single,fig=TRUE>>= hc2 <- hclust(as.dist(d), method="single") coph2<-cor(cophenetic(hc2),as.dist(d)) </p> <p>plot(hc2, main=paste("Dendrogram for ALL AML data: Coph = ", round(coph2,2)), sub="Single linkage, correlation matrix, G= 3,051 genes") </p> <p>cthc2 <- cutree(hc2, 3) table(Y, cthc2)</p> <p>@</p> <p><<complete,fig=TRUE>>= hc3 <- hclust(as.dist(d), method="complete") coph3<-cor(cophenetic(hc3),as.dist(d)) </p> <p>plot(hc3, main=paste("Dendrogram for ALL AML data: Coph = ", round(coph3,2)), sub="Complete linkage, correlation matrix, G= 3,051 genes") </p> <p>cthc3 <- cutree(hc3, 3) table(Y, cthc3) @</p> <p>Divisive hierarchical clustering is available using \texttt{diana} from the \textit{cluster} package.</p> <p><<diana,fig=TRUE>>= di1 <- diana(as.dist(d)) cophdi<- cor(cophenetic(di1), as.dist(d))</p> <p>plot(di1, which.plots=2, #$ main=paste("Dendrogram for ALL AML data: Coph = ", round(cophdi,2)), sub="Divisive algorithm, correlation matrix, G= 3,051 genes") </p> <p>ct.di <- cutree(di1, 3) table(Y, ct.di) @</p> <p>\section{Partitioning Methods}</p> <p>Here we apply the {\em partitioning around medoids} (PAM) method to cluster tumor mRNA samples. </p> <p><<PAM3,fig=TRUE>>= ##PAM set.seed(12345) </p> <p>pm3 <- pam(as.dist(d), k=3, diss=TRUE) table(Y, pm3$clustering)</p> <p>clusplot(d, pm3$clustering, diss=TRUE, labels=3, #$ col.p=1, col.txt=codes(factor(Y))+1, main="Bivariate cluster plot for ALL AML data\n Correlation matrix, K=3, G=3,051 genes") </p> <p>@ <<PAM3plot>>= plot(pm3,which.plots=1)</p> <p>@</p> <p><<PAM3plot2>>= plot(pm3,which.plots=2) @</p> <p>One of the more difficult questions that arises when clustering data is the assessment of how many clusters there are in the data. We now consider using PAM with four clusters.</p> <p><<PAM4,fig=TRUE>>= ##what happens if we try four? set.seed(12345) pm4 <- pam(as.dist(d), k=4, diss=TRUE)</p> <p>clusplot(d, pm4$clustering, diss=TRUE, labels=3, #$ col.p=1, col.txt=codes(factor(Y))+1, main="Bivariate cluster plot for ALL AML data\n Correlation matrix, K=4, G=3,051 genes") @</p> <p>\end{document} </p> </div> <div class="discussion"> </div> </div> </div> </div> <!-- end of main content block --> <!-- start of the left (by default at least) column --> <div id="portal-column-one"> <div class="visualPadding"> <br><br><br> <!-- disabled left slot image <img tal:replace="structure nocall:here/pict.jpg" /> --> <div class="portlet" id="portlet-navigation-tree"> <div> <h5>Navigation</h5> <div class="portletBody"> <div class="portletContent odd"> <a href="http://bioconductor.fhcrc.org/GettingStarted/" accesskey="n" class="navItem navLevel1" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">Getting Started</span> </a> <a href="http://bioconductor.fhcrc.org/overview/" accesskey="n" class="navItem navLevel1" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">Overview</span> </a> <a href="http://bioconductor.fhcrc.org/download/" accesskey="n" class="navItem navLevel1" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">Downloads</span> </a> <a href="http://bioconductor.fhcrc.org/docs/" accesskey="n" class="navItem navLevel1" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">Documentation</span> </a> <a href="http://bioconductor.fhcrc.org/pub/" accesskey="n" class="navItem navLevel1" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">Publications</span> </a> <a href="http://bioconductor.fhcrc.org/workshops/" accesskey="n" class="navItem navLevel1" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">Workshops</span> </a> <a href="http://bioconductor.fhcrc.org/workshops/2010/" accesskey="n" class="navItem navLevel2" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">2010</span> </a> <a href="http://bioconductor.fhcrc.org/workshops/2009/" accesskey="n" class="navItem navLevel2" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">2009</span> </a> <a href="http://bioconductor.fhcrc.org/workshops/2008/" accesskey="n" class="navItem navLevel2" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">2008</span> </a> <a href="http://bioconductor.fhcrc.org/workshops/2007/" accesskey="n" class="navItem navLevel2" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">2007</span> </a> <a href="http://bioconductor.fhcrc.org/workshops/2006/" accesskey="n" class="navItem navLevel2" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">2006</span> </a> <a href="http://bioconductor.fhcrc.org/workshops/2005/" accesskey="n" class="navItem navLevel2" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">2005</span> </a> <a href="http://bioconductor.fhcrc.org/workshops/2004/" accesskey="n" class="navItem navLevel2" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">2004</span> </a> <a href="http://bioconductor.fhcrc.org/workshops/2003/" accesskey="n" class="navItem navLevel2" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">2003</span> </a> <a href="http://bioconductor.fhcrc.org/workshops/2002/" accesskey="n" class="navItem navLevel2" title="Workshops and courses 2002"> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">2002</span> </a> <a href="http://bioconductor.fhcrc.org/workshops/2002/Seattle02/" accesskey="n" class="navItem navLevel3 currentNavItem" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">Seattle Dec</span> </a> <a href="http://bioconductor.fhcrc.org/developers/" accesskey="n" class="navItem navLevel1" title=""> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">Developers</span> </a> <a href="http://bioconductor.fhcrc.org/News/" accesskey="n" class="navItem navLevel1" title="BioC Project News"> <!-- Disable Folder icon <img src="" height="16" width="16" alt="" class="navIcon" tal:condition="not:isAnon" tal:attributes="src python:portal_url+'/'+sibling.getIcon(1); title sibling/Type;" /> --> <span class="navItemText">News</span> </a> </div> </div> </div> </div> </div> </div> <!-- end of the left (by default at least) column --> </div> <!-- end of the main and left columns --> <!-- start of right (by default at least) column --> <div id="portal-column-two"> <div class="visualPadding"> <div> <!-- The Related Items box --> <script type="text/javascript" src="plonesearchbox_utils.js"> </script> <div class="portlet"> <!-- <h5 i18n:translate="searchbox_title">Search Box</h5> --> <div class="portletBody"> <form name="searchbox_form" id="searchbox_form" method="post" onsubmit="return process()" action="redirectToUrl" target="_blank"> <div class="portletContent odd"> <div id="searchbox_fields"> <input type="text" name="toSearch" id="toSearch" size="22" /> </div> <select name="choice" id="choice" onchange="return generateForm();" style="margin: 3px 0px 0px 0px;"> <option value="http://bioconductor.fhcrc.org/workshops/2002/Seattle02/Lab3.Rnw/search?SearchableText=" id="search_portal">In this site</option> <option value="http://bioconductor.fhcrc.org/workshops/2002/Seattle02/Lab3.Rnw/search?path=/Plones/rgentlem/bioconductor/workshops/2002/Seattle02/Lab3.Rnw&SearchableText=" id="search_rubric">In this folder</option> <option value="http://google.com/search?sitesearch=www.bioconductor.org&q=%(text)s">Google this site</option> </select> <input class="context searchButton" type="submit" value="Search" style="margin: 3px;" /> </div> <!-- <div class="portletContent odd"> <input class="context searchButton" type="submit" value="Search" style="margin: 3px;" i18n:attributes="value"/> </div> <div class="portletContent even"> <a href="" tal:attributes="href string:${portal_url}/search_form" i18n:translate="advanced_search_link">Advanced search</a> </div> --> </form> <script type="text/javascript"> <!-- /*in case the first choice of the combobox is an url with several fields*/ clearForm(); generateForm(); --> </script> </div> </div> </div> <div class="portlet" id="portlet-news"> <h5>News</h5> <div class="portletBody"> <div class="portletContent odd"> <div class="portletDetails"> <a href="http://bioconductor.fhcrc.org/News/AdvancedR" class="date" title="Advanced R Programming">2010-05-21</a> <p> Advanced R Programming for Bioinformatics course material now <a href="http://bioconductor.fhcrc.org/workshops/2010/AdvancedR/">available</a> </p> </div> </div> <div class="portletContent even"> <div class="portletDetails"> <a href="http://bioconductor.fhcrc.org/News/bioc_2.6_release" class="date" title="BioC 2.6 Released">2010-04-23</a> <p> Bioconductor 2.6, consisting of 389 packages and designed to work with R version 2.11, was released today. </p> </div> </div> <div class="portletContent odd"> <a href="http://bioconductor.fhcrc.org/news" class="portletMore"> More... </a> </div> </div> </div> </div> </div> <!-- end of the right (by default at least) column --> </div> <!-- end column wrapper --> <div class="visualClear"></div> <hr class="netscape4" /> <div id="portal-footer"> © 2003-2009 BioConductor. All Rights Reserved. <script type="text/javascript"> var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); </script> <script type="text/javascript"> try{ var pageTracker = _gat._getTracker("UA-357281-1"); pageTracker._trackPageview(); } catch(err) {} </script> </div> </div> </body> </html>