Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anteriorRevisão anterior
Próxima revisão
Revisão anterior
cursos:mct:exemplo5 [2011/05/09 10:52] paulojuscursos:mct:exemplo5 [2011/05/27 19:00] (atual) paulojus
Linha 1: Linha 1:
 ====== Miscelânia de tópicos ====== ====== Miscelânia de tópicos ======
  
-<fs medium>Um breve exemplo de operações matriciais - coeficientes de regressao(modelo) linear +<fs medium>Ordenação</fs> 
-</fs><code R> +<code R> 
-require(MASS+x <- rpois(10, lam=10
-data(hills+
-names(hills+sort(x
-X <- cbind(1, hills$dist+order(x
-y <- hills$time +x[order(x)] 
- +x[rev(order(x))
-## Há formas e formas de fazer operações... +args(order
- +order(xdecreasing=T)
-## uma forma não muito adequada: +
-solve(t(X%*% X%*% t(X%*% y +
- +
-## outra melhor: +
-solve(crossprod(X)crossprod(X, y)+
 </code> </code>
  
Linha 73: Linha 68:
 </code> </code>
  
-<fs medium>Lendo dados de teclado e da área de transferência</fs>+<fs medium>Precisão numérica/ponto flutuante</fs> 
 + 
 +Encontrando dados replicados, e não replicados
 <code R> <code R>
-## digitar dados com <ENTER> após cada registro. Digitar um <ENTER> a mais para encerrar. +<- rpois(25, lam=5) 
-s1 <- scan()+
 +unique(x)
  
-## recortar (CTRL-Cos seguintes +duplicated(x
-12  13  14   +x[!duplicated(x)] 
-21  21  14   +x[duplicated(x)]
-12  31  25 +
-15  32  29 +
- +
-## lendo como vetor... +
-s1 <- scan("clipboard"+
-## .. e transformando para matriz +
-## le por linhas, portanto para montar matriz de ser por linha  +
-matrix(s1, nc=3, byrow=T) +
- +
-## agora lendo diretamente como data-frame +
-d1 <- read.table("clipboard"+
-d1 +
- +
-## mais opcoes +
-## recortar (CTRL-C) os seguintes +
-X;      Y;   Z;    S +
-12,3;  13;  14,2;  A +
-21,2;  21;  14,0;  A +
-12,1;  31;  25,1;  B +
-15,1;  32;  29,9;  B +
- +
-d2 <- read.table("clipboard", sep=";", dec=",", header=T) +
-d2+
 </code> </code>
  
-<fs medium>Exemplo lendo tabelas da página do MCT/Indicadores</fs> +Representação de números e ponto flutuante.\\ 
- +''isTRUE'' deve se usado para testar condições dentro de funções.
-Acessar tabelas na web por www.mct.gov.br/indicadores +
- +
-Tabela de Produçãoo científica, tabela 5.1 (pesquisadores)+
 <code R> <code R>
-## Marcar/CTRL-C a tabela de indicadores de pesquisadores +.1 == .3/3 
-pcPesq <- read.table("clipboard"sep="\t", dec=","+all.equal(.1.3/3
-head(pcPesq) +isTRUE(all.equal(0.1, .3/3)) 
- +identical(.1, .3/3)
-## uma um pouco melhor usando mais argumentos +
-pcPesq <- read.table("clipboard", sep="\t", dec=",", strip.white=Tas.is=T) +
-head(pcPesq+
- +
-str(pcPesq)+
 </code> </code>
  
-Note que todas as colunasexceto a primeiraforam lidas como caracteres!+Mais coisas que deveriam ser iguais... mas não exatamente são ... 
 +<code R> 
 +seq(01by=0.1) == 0.3
  
-Note que a tabela usa o caracter "." para separar milhares.\\ +x <c(.3, 0.4 0.10.0.2, 0.0.30.0.4
-Entretanto o R usa "." como caracter de separação decimal +
- +unique(x)
-Duas possíveis formas para contornar e ajustar os dados neste contexto: +
-  Item de lista ordenada converter para números e multiplicar por mil<code R> +
-pcPesq$V2 +
-as.numeric(pcPesq$V2) +
-as.numeric(pcPesq$V2)*1000 +
- +
-## agora automatizando para fazer em todas as colunas necessárias +
-Pesq <as.data.frame(lapply(pcPesqfunction(x){if(is.character(x)) x <as.numeric(x)*1000; return(x)})) +
-Pesq</code> +
-  - Eliminando o caracter "." (por substituição de caracteres. +
-<code R> +
-Pesq1 <as.data.frame(lapply(pcPesqfunction(x){  +
-                   if(!is.numeric(x) & !is.integer(x)) x <as.numeric(gsub("\\.", "", x)+
-                          return(x)}))+
 </code> </code>
  
-Agora lendo os indicadores de estudantes e depois unir tudo em um único objeto+Um exemplo com uma função para resolver equação do 2o grau:
 <code R> <code R>
-pcEst <- read.table("clipboard"sep="\t"dec=",", strip.white=T, as.is=T+eq2g <- function(abc){ 
-head(pcEst)+ delta <- b^2 - 4 * a * c 
 + if(is.complex(delta) || all(delta > 0)) 
 +    delta <- sqrt(delta) 
 + else 
 +    delta <- sqrt(as.complex(delta)
 + return(cbind(-b + c(-1,1* delta)/(2*a)) 
 +}
  
-Est <- as.data.frame(lapply(pcEstfunction(x){if(is.character(x)) x <as.numeric(x)*1000; return(x)})) +print(eq2g(1, -5, 6), dig=16)
-Est+
  
-Pesq$Autor <"Pesquisador" +eq2g(1, c(-5, 1), 6)
-Est$Autor <- "Estudante"+
  
-ProdC <rbind(PesqEst) +eq2g(1, -5, 6) c(23)
-ProdC+
  
-head(ProdC) +eq2g(1/3, -5/36/3)
-names(ProdC) <c("Ano","Autores","Nacional","Internacional","Anais", "Livros", "Capítulos", "Outras", "Autor") +
-head(ProdC) +
-## sempre bom remover o que não é mais necessário... +
-rm(pcEst, pcPesq, Pesq1, Pesq, Est) +
-</code>+
  
-**Alguns gráficos**\\ +print(eq2g(1/3-5/3, 6/3), dig=16)
-Vamos ilustrar o uso de três (3) dispositivos gráficos do R: +
-  Gráficos básicos do sistema (pacote ''graphics''/default) +
-  - Gráficos da biblioteca ''lattice'' +
-  - Gráficos da biblioteca ''ggplot''+
  
-I. gráficos com ''graphics'' (padrões do sistema) +eq2g(1/3-5/36/3- c(23
-<code R> +</code>
-## produção totalsomando pesquisadores e estudantes +
-aggregate(Autores ~ Anodata=ProdC, sum) +
-plot(aggregate(Autores ~ Anodata=ProdC, sum)+
-plot(aggregate(Autores ~ Ano, data=ProdC, sum), type="b", main="Número total de autores")+
  
-## somando agora todas as produções de Perq e Estudantes por ano 
-Totais <- aggregate(. ~ Ano, data=ProdC[,-9], sum) 
-matplot(Totais[,1], Totais[,-1], type="l") 
  
-names(Totais)+<fs medium>Objetos crescentes, substituição der valores e criação direta de vetores</fs>
  
-matplot(Totais[,1], Totais[,-1], type="l", col=c(1, 2, 2, 3, 4, 4, 5), lty=c(1,1,2,1,1,2,5), +Os tempos de execução podem ser substancialmetne diferentes!! 
- xlab="Ano", ylab="Quantidade", main="Produção Científica") +<code R> 
-legend("topleft", names(Totais)[-1], col=c(1, 2, 2, 3, 4, 4, 5), lty=c(1,1,2,1,1,2,5))+n<50000
  
-## agora separando entre Pesquisadores e Estudantes +system.time({ 
-## gráficos podem ser feitos de várias formas, aqui alguns exemplos +vec <- numeric(0) 
-with(ProdC, plot(Autores ~ Ano, type="n")+for(i in 1:n) vec <- c(veci) 
-with(ProdCtext(Ano, Autores, substr(Autor, 1, 1))+})
  
-with(ProdC, coplot(Autores ~ Ano|Autor, type="b")+system.time(
-with(ProdC, coplot(Autores ~ Ano|Autor, type="b", show.given=F))+vec <- numeric(n
 +for(i in 1:nvec[i] <- i 
 +})
  
-with(subset(ProdC, Autor=="Pesquisador"), plot(Autores ~ Ano, type="b")) +system.time({ 
-with(subset(ProdC, Autor=="Estudante"), lines(Autores ~ Ano, type="b", col=2)) +vec <- 1:n 
- +})
-AU <- reshape(ProdC[,c(1,2,9)], idvar="Ano", v.name="Autores", timevar="Autor", direction="wide") +
-matplot(AU[,1], AU[,-1], type="l", col=c(2,4), lty=1, main="Evolução do número de autores",  +
-        xlab="Ano", ylab="Número de Autores"+
-legend("topleft", c("Pesquisadores","Estudandes"), col=c(2,4), lty=1) +
-</code>  +
- +
-II. Gráficos da biblioteca lattice +
-<code R> +
-require(lattice)+
 </code> </code>
  
-III. Gráficos da biblioteca ggplot+Onderm de operações
 <code R> <code R>
-require(ggplot2) +x <- rnorm(10000, m=100, sd=10)
-</code>+
  
-## Outro exemplo.... +system.time({ 
-## Dados socio economicos --> 9.1 + lsum <- 0 
-ScEc <- read.table("clipboard", dec=",", sep="\t", na.strings="\\u2026 ") + for(i in 1:length(x)){ 
-head(ScEc+   lsum <- lsum + log(x[i]) 
- +  } 
-ScEc <- as.data.frame(lapply(pcPesq, ptMil))+ })
  
 +system.time(lsum <- sum(log(x)))
  
 +c(log(12.3), log(16.7), log(18.3))
 +log(c(12.3, 16.7, 18.3))
 </code> </code>
- 
- 

QR Code
QR Code cursos:mct:exemplo5 (generated for current page)