[Seqinr-commits] r1462 - pkg/inst/doc/src/mainmatter

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Wed Oct 8 10:23:53 CEST 2008


Author: lobry
Date: 2008-10-08 10:23:52 +0200 (Wed, 08 Oct 2008)
New Revision: 1462

Added:
   pkg/inst/doc/src/mainmatter/risa.rnw
   pkg/inst/doc/src/mainmatter/risa.tex
Log:
new chapter about making RISA in silico with seqinR

Added: pkg/inst/doc/src/mainmatter/risa.rnw
===================================================================
--- pkg/inst/doc/src/mainmatter/risa.rnw	                        (rev 0)
+++ pkg/inst/doc/src/mainmatter/risa.rnw	2008-10-08 08:23:52 UTC (rev 1462)
@@ -0,0 +1,272 @@
+\documentclass{article}
+\input{../config/commontex}
+
+\title{RISA \textit{in silico} with seqinR}
+\author{Lobry, J.R.}
+
+\begin{document}
+\SweaveInput{../config/commonrnw.rnw}
+\maketitle
+\tableofcontents
+% BEGIN - DO NOT REMOVE THIS LINE
+
+\section{Introduction}
+
+By RISA we mean here Ribosomal Intergenic Spacer Analysis. Ribosomal
+genes are highly conserved so that it is relatively easy to design
+universal PCR primers. On the other hand the intergenic space is under
+weaker selective pressure, yielding more between species variability
+in terms of length.
+
+Making a RISA \textit{in silico} is an interesting task for seqinR :
+we want to extract ribosomal genes from general databases and then
+to compute the fragment length between the two primers.
+
+\section{The primers}
+
+Let's use the following primer in the 16S, also known as 
+S-D-Bact-1522-b-S-20 \cite{RanjardL2000}:
+
+<<p16,fig=F>>=
+library(seqinr)
+(amo1 <- tolower("TGCGGCTGGATCCCCTCCTT")) # 16 S
+@ 
+
+
+Let's use the following primer in the 23S, also known as 
+L-D-Bact-132-a-A-18 \cite{RanjardL2000}:
+
+<<p23,fig=F>>=
+(amo2 <- tolower("CCGGGTTTCCCCATTCGG"))   # 23 S
+@ 
+
+We work thereafter with its complementary sequence as follows:
+
+<<p23c,fig=F>>=
+cplt <- function(x) c2s(comp(rev(s2c(x))))
+(amo2 <- cplt(amo2))
+@ 
+
+\section{Finding a primer location}
+
+We want to fing a substring allowing for mismatches (say 3). Let's
+write a function for this. Here we just use a moving window to count the
+number of matches for all positions and return the one with the
+maximum value. If the maximum number of matches if not enough, \texttt{NA}
+is returned instead.
+
+<<findamo,fig=F>>=
+find.amo <- function(amo, myseq, verbose = FALSE, nmiss = 3){
+  y <- numeric(nchar(myseq)) # nombre de match exacts
+  myseq2 <- s2c(myseq)
+  for(k in seq_len(nchar(myseq) - nchar(amo))){
+     y[k] <- sum(s2c(amo) == myseq2[k:(k+nchar(amo)-1)])
+  }
+  if(verbose) plot(1:nchar(myseq),y, type="h", ylim = c(0,nchar(amo)), main = amo)
+  nmismatch <- nchar(amo) - max(y) 
+  if(verbose) print(paste(nmismatch,"mismatch"))
+  if(nmismatch > nmiss){
+    warning(paste("too many mismatches:", nmismatch))
+    return(NA)
+  }
+  if(verbose) rug(which.max(y),col="red")
+  return(which.max(y))
+}
+@ 
+
+Example with a random sequence:
+
+<<essai,fig=T,width=8,height=4>>=
+c2s(sample(s2c("acgt"),1000,rep=T))->rseq
+find.amo(amo1,rseq,verb=T)
+@ 
+
+Now insert a perfect target :
+
+<<essai2,fig=T,width=8,height=4>>=
+substr(rseq,100,100+nchar(amo1)) <- amo1
+find.amo(amo1,rseq,verb=T)
+@ 
+
+\section{Compute the length of the intergenic space}
+
+More exactly we want to compute the length of the fragment amplified
+between two PCR primers. Here it is, note that we have to take into account
+whether the primers are on the direct or complementary strand and the
+length of the primers:
+
+<<risalength,fig=F>>=
+risa.length <- function(myseq, amo1, amo2, forward, verbose = FALSE){
+  if(forward){
+    posamo1 <- find.amo(amo1, myseq, verbose = verbose)
+    posamo2 <- find.amo(amo2, myseq, verbose = verbose)
+  } else {
+    posamo1 <- find.amo(cplt(amo1), myseq, verbose = verbose)
+    posamo2 <- find.amo(cplt(amo2), myseq, verbose = verbose)
+  }
+  if(is.na(posamo1)) return(list(res = NA, posamo1 = NA, posamo2 = NA))
+  if(is.na(posamo2)) return(list(res = NA, posamo1 = NA, posamo2 = NA))
+  return(list( res = abs(posamo2 - posamo1) + ifelse(forward, nchar(amo2), nchar(amo1)),
+      posamo1 = posamo1, posamo2 = posamo2 ))
+}
+@ 
+
+Let's check this with an artificial example by inserting the second primer at
+position 300 in our random sequence:
+
+<<test,fig=F>>=
+nchar(amo2)
+substr(rseq,300,300+nchar(amo2)) <- amo2
+risa.length(rseq, amo1, amo2, forward = T)$res
+risa.length(cplt(rseq), amo1, amo2, forward = F)$res
+@ 
+
+Looks OK for me.
+
+\section{Compute IGS for a sequence fragment}
+
+\begin{figure}
+\centering
+\fbox{
+\begin{minipage}{\textwidth}
+\centering
+\includegraphics[width=\textwidth]{../figs/fig1RanjardL2000}
+\caption{Screenshot of a part of figure 1 in \cite{RanjardL2000} showing the observed range
+of ribosomal intergenic space length in bacterial species (n = 428).}
+\label{fig1RanjardL2000}
+\end{minipage}
+}
+\end{figure}
+
+
+By sequence fragment we mean here a genbank entry accessed
+by its name (\texttt{mnemo} in the code thereafter).
+There could be more than one rRNA operon in the sequence fragment
+but there should be the same number of 16S and 23S genes.
+There is a maximum length to avoid problems when genes are
+not annotated in consecutive order, in this case \texttt{NA}
+is returned. The default maximum length of 10 kb is conservative,
+the maximum observed value is 1.5 kb (\textit{cf} Fig. \ref{fig1RanjardL2000}),
+some post-processing of the results is most likely necessary to remove outliers.
+
+<<mn2risa,fig=F>>=
+mn2risa <- function(mnemo, amo1, amo2, maxlength = 10000, verbose = FALSE){
+	  if(verbose) print(paste("mn2risa -->", mnemo))
+	  query("frag", paste("N=", mnemo))
+	  query("frag16S", "frag ET T=RRNA ET K=16S@")
+	  if(verbose) print(paste("n 16S = ", frag16S$nelem))
+	  query("frag23S", "frag ET T=RRNA ET K=23S@")
+     if(verbose) print(paste("n 23S = ", frag23S$nelem))
+     if(frag16S$nelem != frag23S$nelem) return(NA)
+     
+	  n <- frag16S$nelem
+	  loc1 <- getLocation(frag16S)
+	  loc2 <- getLocation(frag23S)
+	  risa <- numeric(n) 
+	  	for(i in seq_len(n)){
+		coords <- c(loc1[[i]], loc2[[i]])
+		if(coords[1] < coords[3]){
+		  forward <- TRUE
+		  if(verbose) print("forward")
+		} else {
+		  forward <- FALSE	
+		  if(verbose) print("bacward")
+		}
+		if(verbose) print(coords)
+		xmin <- min(coords)
+		xmax <- max(coords)
+		if(xmax - xmin > maxlength) return(NA)
+		myseq <- as.character(getFrag(frag$req[[1]], xmin, xmax))
+		if(verbose) print(paste("nchar myseq = ", nchar(myseq)))
+     	risa[i] <- risa.length(myseq, amo1, amo2, forward, verbose = F)$res
+    }
+    return(risa)    
+}
+@ 
+
+Example with a fragment with one 16S and two 23S genes,
+\texttt{NA} is returned as expected :
+
+<<BBRNAOPR,fig=F,eval=F>>=
+mn2risa("BBRNAOPR", amo1, amo2,verb=T)
+@ 
+
+Example with a fragment with seven 16S and seven 23S genes,
+the seven RISA length are returned :
+
+<<AE005174,fig=F,eval=F>>=
+mn2risa("AE005174", amo1, amo2,verb=T)
+@ 
+
+\section{Compute IGS for a species}
+
+We could work in fact at any taxonomical level, but suppose here that
+we are interested by the species level. All we have to do is to find
+the list of fragment where there is at least one 16S and one 23S gene.
+We use here all the power of ACNUC query language.
+
+<<sp2risa>>=
+sp2risa <- function(sp, amo1, amo2, verbose = TRUE){
+	if(verbose) print(paste("sp2risa -->", sp))
+	query("cursp", paste("sp=", sp), virtual=TRUE)
+	query("res1", "cursp ET T=RRNA ET K=16S@", virtual=TRUE)
+	query("res1", "ME res1",virtual=TRUE)
+	query("res2","cursp ET T=RRNA ET K=23S@",virtual=TRUE)
+	query("res2","ME res2",virtual=TRUE)
+	query("res3", "res1 ET res2")
+	if(verbose) print(paste("number of mother sequences = ", res3$nelem))
+	seqnames <- getName(res3)
+	result <- vector("list", res3$nelem)
+	names(result) <- seqnames
+	for(i in seq_len(res3$nelem)){
+	  result[[i]] <- mn2risa(seqnames[i], amo1, amo2, verbose = verbose)
+	}
+	return(result)
+}
+@ 
+
+
+\section{Loop over many species}
+
+We loop now over all bacterial species in genbank. As this is long, we run
+it overnight in batch, saving results on the fly to spy them.
+When the species name is a single word this is most likely a genus,
+then to avoid redundancy in computation with the underlying species,
+it is not considered and a \texttt{+Inf} value is set. An empty list
+means that no fragment with both 16S and 23S genes were found. A
+missing value \texttt{NA} means that the PCR primers were not found.
+
+<<mainloop,fig=F,eval=F>>=
+query("all", "sp=bacteria", virtual=TRUE)
+query("allsp", "ps all")
+splist <- getName(allsp)
+resultat <- vector("list", length(splist))
+names(resultat) <- splist
+i <- 1
+for(sp in splist){
+  print(paste("===>",sp))
+  if(length(unlist(strsplit(sp, split= " "))) == 1){
+  	  resultat[[i]] <- +Inf
+  	  i <- i + 1
+  	  next
+  	}
+  resultat[[i]] <- sp2risa(sp=sp,amo1, amo2, verbose = TRUE)
+  save(resultat, file = "resultat.RData")
+  print(paste("=>", resultat[[i]]))
+  i <- i + 1
+}
+@ 
+
+\section{Playing with results}
+
+
+\SweaveInput{../config/sessionInfo.rnw}
+
+% END - DO NOT REMOVE THIS LINE
+
+%%%%%%%%%%%%  BIBLIOGRAPHY %%%%%%%%%%%%%%%%%
+\clearpage
+\addcontentsline{toc}{section}{References}
+\bibliographystyle{plain}
+\bibliography{../config/book}
+\end{document}

Added: pkg/inst/doc/src/mainmatter/risa.tex
===================================================================
--- pkg/inst/doc/src/mainmatter/risa.tex	                        (rev 0)
+++ pkg/inst/doc/src/mainmatter/risa.tex	2008-10-08 08:23:52 UTC (rev 1462)
@@ -0,0 +1,409 @@
+\documentclass{article}
+\input{../config/commontex}
+
+\title{RISA \textit{in silico} with seqinR}
+\author{Lobry, J.R.}
+
+\usepackage{/Library/Frameworks/R.framework/Resources/share/texmf/Sweave}
+\begin{document}
+%
+% To change the R input/output style:
+%
+\definecolor{Soutput}{rgb}{0,0,0.56}
+\definecolor{Sinput}{rgb}{0.56,0,0}
+\DefineVerbatimEnvironment{Sinput}{Verbatim}
+{formatcom={\color{Sinput}},fontsize=\footnotesize, baselinestretch=0.75}
+\DefineVerbatimEnvironment{Soutput}{Verbatim}
+{formatcom={\color{Soutput}},fontsize=\footnotesize, baselinestretch=0.75}
+%
+% This removes the extra spacing after code and output chunks in Sweave,
+% but keeps the spacing around the whole block.
+%
+\fvset{listparameters={\setlength{\topsep}{0pt}}}
+\renewenvironment{Schunk}{\vspace{\topsep}}{\vspace{\topsep}}
+%
+% Rlogo
+%
+\newcommand{\Rlogo}{\protect\includegraphics[height=1.8ex,keepaspectratio]{../figs/Rlogo.pdf}}
+%
+% Shortcut for seqinR:
+%
+\newcommand{\seqinr}{\texttt{seqin\bf{R}}}
+\newcommand{\Seqinr}{\texttt{Seqin\bf{R}}}
+\fvset{fontsize= \scriptsize}
+%
+% R output options and libraries to be loaded.
+%
+%
+%  Sweave Options
+%
+% Put all figures in the fig folder and start the name with current file name.
+% Do not produce EPS files
+%
+
+
+\maketitle
+\tableofcontents
+% BEGIN - DO NOT REMOVE THIS LINE
+
+\section{Introduction}
+
+By RISA we mean here Ribosomal Intergenic Spacer Analysis. Ribosomal
+genes are highly conserved so that it is relatively easy to design
+universal PCR primers. On the other hand the intergenic space is under
+weaker selective pressure, yielding more between species variability
+in terms of length.
+
+Making a RISA \textit{in silico} is an interesting task for seqinR :
+we want to extract ribosomal genes from general databases and then
+to compute the fragment length between the two primers.
+
+\section{The primers}
+
+Let's use the following primer in the 16S, also known as 
+S-D-Bact-1522-b-S-20 \cite{RanjardL2000}:
+
+\begin{Schunk}
+\begin{Sinput}
+ library(seqinr)
+ (amo1 <- tolower("TGCGGCTGGATCCCCTCCTT"))
+\end{Sinput}
+\begin{Soutput}
+[1] "tgcggctggatcccctcctt"
+\end{Soutput}
+\end{Schunk}
+
+
+Let's use the following primer in the 23S, also known as 
+L-D-Bact-132-a-A-18 \cite{RanjardL2000}:
+
+\begin{Schunk}
+\begin{Sinput}
+ (amo2 <- tolower("CCGGGTTTCCCCATTCGG"))
+\end{Sinput}
+\begin{Soutput}
+[1] "ccgggtttccccattcgg"
+\end{Soutput}
+\end{Schunk}
+
+We work thereafter with its complementary sequence as follows:
+
+\begin{Schunk}
+\begin{Sinput}
+ cplt <- function(x) c2s(comp(rev(s2c(x))))
+ (amo2 <- cplt(amo2))
+\end{Sinput}
+\begin{Soutput}
+[1] "ccgaatggggaaacccgg"
+\end{Soutput}
+\end{Schunk}
+
+\section{Finding a primer location}
+
+We want to fing a substring allowing for mismatches (say 3). Let's
+write a function for this. Here we just use a moving window to count the
+number of matches for all positions and return the one with the
+maximum value. If the maximum number of matches if not enough, \texttt{NA}
+is returned instead.
+
+\begin{Schunk}
+\begin{Sinput}
+ find.amo <- function(amo, myseq, verbose = FALSE, nmiss = 3) {
+     y <- numeric(nchar(myseq))
+     myseq2 <- s2c(myseq)
+     for (k in seq_len(nchar(myseq) - nchar(amo))) {
+         y[k] <- sum(s2c(amo) == myseq2[k:(k + nchar(amo) - 
+             1)])
+     }
+     if (verbose) 
+         plot(1:nchar(myseq), y, type = "h", ylim = c(0, nchar(amo)), 
+             main = amo)
+     nmismatch <- nchar(amo) - max(y)
+     if (verbose) 
+         print(paste(nmismatch, "mismatch"))
+     if (nmismatch > nmiss) {
+         warning(paste("too many mismatches:", nmismatch))
+         return(NA)
+     }
+     if (verbose) 
+         rug(which.max(y), col = "red")
+     return(which.max(y))
+ }
+\end{Sinput}
+\end{Schunk}
+
+Example with a random sequence:
+
+\begin{Schunk}
+\begin{Sinput}
+ rseq <- c2s(sample(s2c("acgt"), 1000, rep = T))
+ find.amo(amo1, rseq, verb = T)
+\end{Sinput}
+\begin{Soutput}
+[1] "8 mismatch"
+[1] NA
+\end{Soutput}
+\end{Schunk}
+\includegraphics{../figs/risa-essai}
+
+Now insert a perfect target :
+
+\begin{Schunk}
+\begin{Sinput}
+ substr(rseq, 100, 100 + nchar(amo1)) <- amo1
+ find.amo(amo1, rseq, verb = T)
+\end{Sinput}
+\begin{Soutput}
+[1] "0 mismatch"
+[1] 100
+\end{Soutput}
+\end{Schunk}
+\includegraphics{../figs/risa-essai2}
+
+\section{Compute the length of the intergenic space}
+
+More exactly we want to compute the length of the fragment amplified
+between two PCR primers. Here it is, note that we have to take into account
+whether the primers are on the direct or complementary strand and the
+length of the primers:
+
+\begin{Schunk}
+\begin{Sinput}
+ risa.length <- function(myseq, amo1, amo2, forward, verbose = FALSE) {
+     if (forward) {
+         posamo1 <- find.amo(amo1, myseq, verbose = verbose)
+         posamo2 <- find.amo(amo2, myseq, verbose = verbose)
+     }
+     else {
+         posamo1 <- find.amo(cplt(amo1), myseq, verbose = verbose)
+         posamo2 <- find.amo(cplt(amo2), myseq, verbose = verbose)
+     }
+     if (is.na(posamo1)) 
+         return(list(res = NA, posamo1 = NA, posamo2 = NA))
+     if (is.na(posamo2)) 
+         return(list(res = NA, posamo1 = NA, posamo2 = NA))
+     return(list(res = abs(posamo2 - posamo1) + ifelse(forward, 
+         nchar(amo2), nchar(amo1)), posamo1 = posamo1, posamo2 = posamo2))
+ }
+\end{Sinput}
+\end{Schunk}
+
+Let's check this with an artificial example by inserting the second primer at
+position 300 in our random sequence:
+
+\begin{Schunk}
+\begin{Sinput}
+ nchar(amo2)
+\end{Sinput}
+\begin{Soutput}
+[1] 18
+\end{Soutput}
+\begin{Sinput}
+ substr(rseq, 300, 300 + nchar(amo2)) <- amo2
+ risa.length(rseq, amo1, amo2, forward = T)$res
+\end{Sinput}
+\begin{Soutput}
+[1] 218
+\end{Soutput}
+\begin{Sinput}
+ risa.length(cplt(rseq), amo1, amo2, forward = F)$res
+\end{Sinput}
+\begin{Soutput}
+[1] 218
+\end{Soutput}
+\end{Schunk}
+
+Looks OK for me.
+
+\section{Compute IGS for a sequence fragment}
+
+\begin{figure}
+\centering
+\fbox{
+\begin{minipage}{\textwidth}
+\centering
+\includegraphics[width=\textwidth]{../figs/fig1RanjardL2000}
+\caption{Screenshort of a part of figure 1 in \cite{RanjardL2000} showing the observed range
+of ribosomal intergenic space length in bacterial species (n = 428).}
+\label{fig1RanjardL2000}
+\end{minipage}
+}
+\end{figure}
+
+
+By sequence fragment we mean here a genbank entry accessed
+by its name (\texttt{mnemo} in the code thereafter).
+There could be more than one rRNA operon in the sequence fragment
+but there should be the same number of 16S and 23S genes.
+There is a maximum length to avoid problems when genes are
+not annotated in consecutive order, in this case \texttt{NA}
+is returned. The default maximum length of 10 kb is conservative,
+the maximum observed value is 1.5 kb (\textit{cf} Fig. \ref{fig1RanjardL2000}),
+some post-processing of the results is most likely necessary to remove outliers.
+
+\begin{Schunk}
+\begin{Sinput}
+ mn2risa <- function(mnemo, amo1, amo2, maxlength = 10000, 
+     verbose = FALSE) {
+     if (verbose) 
+         print(paste("mn2risa -->", mnemo))
+     query("frag", paste("N=", mnemo))
+     query("frag16S", "frag ET T=RRNA ET K=16S@")
+     if (verbose) 
+         print(paste("n 16S = ", frag16S$nelem))
+     query("frag23S", "frag ET T=RRNA ET K=23S@")
+     if (verbose) 
+         print(paste("n 23S = ", frag23S$nelem))
+     if (frag16S$nelem != frag23S$nelem) 
+         return(NA)
+     n <- frag16S$nelem
+     loc1 <- getLocation(frag16S)
+     loc2 <- getLocation(frag23S)
+     risa <- numeric(n)
+     for (i in seq_len(n)) {
+         coords <- c(loc1[[i]], loc2[[i]])
+         if (coords[1] < coords[3]) {
+             forward <- TRUE
+             if (verbose) 
+                 print("forward")
+         }
+         else {
+             forward <- FALSE
+             if (verbose) 
+                 print("bacward")
+         }
+         if (verbose) 
+             print(coords)
+         xmin <- min(coords)
+         xmax <- max(coords)
+         if (xmax - xmin > maxlength) 
+             return(NA)
+         myseq <- as.character(getFrag(frag$req[[1]], xmin, 
+             xmax))
+         if (verbose) 
+             print(paste("nchar myseq = ", nchar(myseq)))
+         risa[i] <- risa.length(myseq, amo1, amo2, forward, 
+             verbose = F)$res
+     }
+     return(risa)
+ }
+\end{Sinput}
+\end{Schunk}
+
+Example with a fragment with one 16S and two 23S genes,
+\texttt{NA} is returned as expected :
+
+\begin{Schunk}
+\begin{Sinput}
+ mn2risa("BBRNAOPR", amo1, amo2, verb = T)
+\end{Sinput}
+\end{Schunk}
+
+Example with a fragment with seven 16S and seven 23S genes,
+the seven RISA length are returned :
+
+\begin{Schunk}
+\begin{Sinput}
+ mn2risa("AE005174", amo1, amo2, verb = T)
+\end{Sinput}
+\end{Schunk}
+
+\section{Compute IGS for a species}
+
+We could work in fact at any taxonomical level, but suppose here that
+we are interested by the species level. All we have to do is to find
+the list of fragment where there is at least one 16S and one 23S gene.
+We use here all the power of ACNUC query language.
+
+\begin{Schunk}
+\begin{Sinput}
+ sp2risa <- function(sp, amo1, amo2, verbose = TRUE) {
+     if (verbose) 
+         print(paste("sp2risa -->", sp))
+     query("cursp", paste("sp=", sp), virtual = TRUE)
+     query("res1", "cursp ET T=RRNA ET K=16S@", virtual = TRUE)
+     query("res1", "ME res1", virtual = TRUE)
+     query("res2", "cursp ET T=RRNA ET K=23S@", virtual = TRUE)
+     query("res2", "ME res2", virtual = TRUE)
+     query("res3", "res1 ET res2")
+     if (verbose) 
+         print(paste("number of mother sequences = ", res3$nelem))
+     seqnames <- getName(res3)
+     result <- vector("list", res3$nelem)
+     names(result) <- seqnames
+     for (i in seq_len(res3$nelem)) {
+         result[[i]] <- mn2risa(seqnames[i], amo1, amo2, verbose = verbose)
+     }
+     return(result)
+ }
+\end{Sinput}
+\end{Schunk}
+
+
+\section{Loop over many species}
+
+We loop now over all bacterial species in genbank. As this is long, we run
+it overnight in batch, saving results on the fly to spy them.
+When the species name is a single word this is most likely a genus,
+then to avoid redundancy in computation with the underlying species,
+it is not considered and a \texttt{+Inf} value is set. An empty list
+means that no fragment with both 16S and 23S genes were found. A
+missing value \texttt{NA} means that the PCR primers were not found.
+
+\begin{Schunk}
+\begin{Sinput}
+ query("all", "sp=bacteria", virtual = TRUE)
+ query("allsp", "ps all")
+ splist <- getName(allsp)
+ resultat <- vector("list", length(splist))
+ names(resultat) <- splist
+ i <- 1
+ for (sp in splist) {
+     print(paste("===>", sp))
+     if (length(unlist(strsplit(sp, split = " "))) == 1) {
+         resultat[[i]] <- +Inf
+         i <- i + 1
+         next
+     }
+     resultat[[i]] <- sp2risa(sp = sp, amo1, amo2, verbose = TRUE)
+     save(resultat, file = "resultat.RData")
+     print(paste("=>", resultat[[i]]))
+     i <- i + 1
+ }
+\end{Sinput}
+\end{Schunk}
+
+\section{Playing with results}
+
+
+
+\section*{Session Informations}
+
+This part was compiled under the following \Rlogo{}~environment:
+
+\begin{itemize}
+  \item R version 2.7.2 (2008-08-25), \verb|i386-apple-darwin8.8.2|
+  \item Locale: \verb|fr_FR.UTF-8/fr_FR.UTF-8/fr_FR.UTF-8/C/C/C|
+  \item Base packages: base, datasets, grDevices, graphics, methods,
+    stats, utils
+  \item Other packages: MASS~7.2-44, ade4~1.4-9, ape~2.2-1,
+    nlme~3.1-89, quadprog~1.4-11, seqinr~2.0-0, tseries~0.10-16,
+    xtable~1.5-3, zoo~1.5-4
+  \item Loaded via a namespace (and not attached): grid~2.7.2,
+    lattice~0.17-13
+\end{itemize}
+There were two compilation steps:
+
+\begin{itemize}
+  \item \Rlogo{} compilation time was: Wed Oct  8 10:17:42 2008
+  \item \LaTeX{} compilation time was: \today
+\end{itemize}
+
+% END - DO NOT REMOVE THIS LINE
+
+%%%%%%%%%%%%  BIBLIOGRAPHY %%%%%%%%%%%%%%%%%
+\clearpage
+\addcontentsline{toc}{section}{References}
+\bibliographystyle{plain}
+\bibliography{../config/book}
+\end{document}



More information about the Seqinr-commits mailing list