Professional Documents
Culture Documents
Freire, F.
Departamento de Eng Qumica, CEBQ, IST-UTL, Portugal
20 de Setembro de 2013
Resumo
Mostra-se como utilizar R num documento em L
A
T
E
X escrito em por-
tugues (ou noutra lngua com caracteres acentuados), atraves do Sweave
no TexShop para Mac OS X Lion.
1 Introducao
A utilizacao de R atraves do Sweave num documento em L
A
T
E
X pode ser com-
plicada se nao quisermos utilizar a linha de comando.
Tudo se deve a problemas da codicacao de caracteres.
R e sem d uvida uma ferramenta imprescindvel para tratamento estatstico de
dados. Por outro lado, o L
A
T
E
X e uma forma de produzir documentos com
vantagens conhecidas.
Neste documento pretende-se descrever como num ambiente Mac OS X Lion se
pode integrar a execucao de codigo em R num documento escrito em portugues
no L
A
T
E
X.
Nao e inten cao deste documento ensinar Sweave nem qualquer um dos outros
pacotes utilizados. Para isso consulte a internet.
2 Ambiente de Trabalho
O sistema operativo e Mac OS X Lion:
Darwin Kernel Version 11.3.0: Thu Jan 12 18:47:41 PST 2012
O editor de L
A
T
E
X e o TeXShop v3.04.
A distribui cao de T
E
X e:
TeX 3.1415926 (TeX Live 2011)
kpathsea version 6.0.1
Copyright 2011 D.E. Knuth.
k
1
B
k
2
C
Se o sistema a estudar for fechado, i.e.
dA
dt
= r
A
= k
1
Ak
2
B
dB
dt
= r
B
= k
1
A(k
2
+ k
3
) B
A integracao deste sistema pode ser realizada pelo R utilizando a livraria ode-
solve inline com o L
A
T
E
X.
Por exemplo para k
1
= 0, 04 k
2
= 0, 02 e k
3
= 0, 04 com as condicoes
iniciais A = 1, B = 0 eC = 0 e integrando entre t = 0..100 com a representa cao
de pontos de 5 em 5 minutos, pode ser obtida pelo seguinte chunk:
> parms <- c(k1=0.04, k2=0.02, k3=0.04)
> my.atol <- c(1e-6, 1e-10, 1e-6)
3
> times <- seq(0,100,5)
> ODE <- function(t, y, p)
+ {
+ dA <- -p["k1"] * y[1] + p["k2"] * y[2]
+ dB <- p["k1"] * y[1]-p["k2"]*y[2]-p["k3"]*y[2]
+ dC<- p["k3"]*y[2]
+ list(c(dA,dB,dC),c(B.massa=sum(y)))
+ }
> require(odesolve)
> ## Quanto tempo leva a integrac~ao?
> system.time(
+ out <- lsoda(c(1,0,0),times,ODE, parms, rtol=1e-7, atol= my.atol)
+ )
user system elapsed
0.003 0.000 0.003
> ## Os resultados s~ao:
> out
time 1 2 3 B.massa
[1,] 0 1.00000000 0.00000000 0.00000000 1
[2,] 5 0.82666496 0.15634492 0.01699012 1
[3,] 10 0.69559682 0.24626786 0.05813532 1
[4,] 15 0.59427689 0.29308267 0.11264044 1
[5,] 20 0.51417887 0.31228235 0.17353878 1
[6,] 25 0.44946554 0.31413025 0.23640422 1
[7,] 30 0.39611374 0.30539578 0.29849047 1
[8,] 35 0.35132689 0.29051682 0.35815629 1
[9,] 40 0.31314005 0.27237783 0.41448212 1
[10,] 45 0.28015435 0.25283062 0.46701503 1
[11,] 50 0.25135818 0.23304253 0.51559929 1
[12,] 55 0.22600650 0.21372916 0.56026434 1
[13,] 60 0.20353939 0.19530964 0.60115097 1
[14,] 65 0.18352672 0.17801015 0.63846313 1
[15,] 70 0.16563060 0.16193273 0.67243667 1
[16,] 75 0.14957969 0.14710094 0.70331937 1
[17,] 80 0.13515153 0.13348997 0.73135849 1
[18,] 85 0.12216027 0.12104650 0.75679323 1
[19,] 90 0.11044812 0.10970154 0.77985034 1
[20,] 95 0.09987923 0.09937878 0.80074199 1
[21,] 100 0.09033534 0.08999988 0.81966478 1
attr(,"istate")
[1] 2
> # Vamos fazer o grafico
> # entre t=0 e 100 e entre 0 e Ao
> xrange <- c(0,100)
> yrange <- c(0,1)
> # O grafico
> plot(xrange, yrange, type="n", xlab="t (min)", ylab="[ i ] (mol/L)" )
> colors <- rainbow(3)
4
> linetype <- c(1:3)
> plotchar <- c(1:3)
> espe<-c("A","B","C")
> # vamos por ainda umas linhas
> for (i in 1:3) {
+ lines(out[,1], out[,i+1], type="b", lwd=1.5,
+ lty=linetype[i], col=colors[i], pch=plotchar[i])
+ }
> # adicionamos um ttulo e um subttulo
> title("Reactor descontnuo", "Exemplo 2 - ODE's em R")
> # e uma legenda
> legend(10, yrange[2], espe, cex=0.8, col=colors,
+ pch=plotchar, lty=linetype, title="Especie")
0 20 40 60 80 100
0
.
0
0
.
2
0
.
4
0
.
6
0
.
8
1
.
0
t (min)
[
i
]
(
m
o
l
/
L
)
Reactor descontnuo
Exemplo 2 ODE's em R
Espcie
A
B
C
5 Anexo
Se quiser experimentar a reproduzir este documento precisa do seguinte pream-
bulo:
\documentclass[a4paper]{article}
\usepackage[portuguese]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[fleqn,tbtags]{mathtools} %xrightleftharpoon
\usepackage[parfill]{parskip} %noident
5
\usepackage{Sweave}
6 Bibliograa
Hornik (2012), The R FAQ, ISBN 3-900051-08-9
Friedrich Leisch. Sweave: Dynamic generation of statistical reports using li-
terate data analysis. In Wolfgang Hardle and Bernd Ronz, editors, Compstat
2002 - Proceedings in Computational Statistics, pages 575-580. Physica Verlag,
Heidelberg, 2002. ISBN 3-7908-1517-9.
6