Não foi possível enviar o arquivo. Será algum problema com as permissões?
Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
cursos:mct:exemplo5 [2011/05/09 10:58] paulojus |
cursos: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>Ordenação</fs> | ||
+ | <code R> | ||
+ | x <- rpois(10, lam=10) | ||
+ | x | ||
+ | sort(x) | ||
+ | order(x) | ||
+ | x[order(x)] | ||
+ | x[rev(order(x))] | ||
+ | args(order) | ||
+ | order(x, decreasing=T) | ||
+ | </code> | ||
- | <fs medium>Lendo dados de teclado e da área de transferência</fs> | + | <fs medium>Representação e Manipulação de datas</fs> |
<code R> | <code R> | ||
- | ## digitar dados com <ENTER> após cada registro. Digitar um <ENTER> a mais para encerrar. | + | ## transformando caracteres em datas |
- | s1 <- scan() | + | dt1 <- as.Date("4/02/2011 03:24:13", "%d/%m/%Y %H:%M:%S") |
+ | dt1 | ||
+ | ## exibindo a data de otras formas | ||
+ | format(dt1, "%j") # dia do ano | ||
+ | format(dt1, "%A") # dia da semana | ||
+ | format(dt1, "%c") # referencia completa (de acordo com o locale do sistema) | ||
+ | format(dt1, "%m") # número do mes | ||
- | ## recortar (CTRL-C) os seguintes | + | ## opcoes disponíveis para exibição: |
- | 12 13 14 | + | # a A b B c d H I j m M p S U w W x X y Y z Z |
- | 21 21 14 | + | |
- | 12 31 25 | + | |
- | 15 32 29 | + | |
- | ## lendo como vetor... | + | Sys.time() |
- | s1 <- scan("clipboard") | + | format(as.Date(Sys.time(), "%d/%m/%Y %H:%M:%S"), "%j") |
- | ## .. 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 | + | ## as datas podem ser fornecidas de outras maneiras... |
- | d1 <- read.table("clipboard") | + | x <- c("25set1967", "28set1969", "30jan2003", "05jul2004") |
- | d1 | + | z <- strptime(x, "%d%b%Y") |
+ | z | ||
- | ## mais opcoes | + | ## |
- | ## recortar (CTRL-C) os seguintes | + | ## Ver detalhes aqui!!! |
- | X; Y; Z; S | + | ## |
- | 12,3; 13; 14,2; A | + | ## e note a confusão com a omisão do século !!! |
- | 21,2; 21; 14,0; A | + | x <- c("1jan90", "2jan90", "31mar90", "30jul90") |
- | 12,1; 31; 25,1; B | + | z <- strptime(x, "%d%b%y") |
- | 15,1; 32; 29,9; B | + | z |
+ | x <- c("25set67", "28set69", "30jan03", "05jul04") | ||
+ | z <- strptime(x, "%d%b%y") | ||
+ | z | ||
- | d2 <- read.table("clipboard", sep=";", dec=",", header=T) | + | ## concatenando datas e horarios para formar registros únicos |
- | d2 | + | dates <- c("02/27/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92") |
- | </code> | + | times <- c("23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26") |
+ | x <- paste(dates, times) | ||
+ | strptime(x, "%m/%d/%y %H:%M:%S") | ||
- | <fs medium>Exemplo lendo tabelas da página do MCT/Indicadores</fs> | + | dt2 <- strptime(x, "%m/%d/%y %H:%M:%S") |
+ | format(dt2, "%c") | ||
- | Acessar tabelas na web por www.mct.gov.br/indicadores | + | dt2 <- sort(dt2) |
+ | dt2 | ||
- | Tabela de Produçãoo científica, tabela 5.1 (pesquisadores) | + | diff(dt2) |
- | <code R> | + | |
- | ## Marcar/CTRL-C a tabela de indicadores de pesquisadores | + | |
- | pcPesq <- read.table("clipboard", sep="\t", dec=",") | + | |
- | head(pcPesq) | + | |
- | ## uma um pouco melhor usando mais argumentos | + | ## frações de segundos |
- | pcPesq <- read.table("clipboard", sep="\t", dec=",", strip.white=T, as.is=T) | + | z <- strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS") |
- | head(pcPesq) | + | z |
- | + | op <- options(digits.secs=3) | |
- | str(pcPesq) | + | z |
</code> | </code> | ||
- | Note que todas as colunas, exceto a primeira, foram lidas como caracteres! | + | <fs medium>Precisão numérica/ponto flutuante</fs> |
- | Note que a tabela usa o caracter "." para separar milhares.\\ | + | Encontrando dados replicados, e não replicados |
- | Entretanto o R usa "." como caracter de separação decimal | + | <code R> |
+ | x <- rpois(25, lam=5) | ||
+ | x | ||
+ | unique(x) | ||
- | Duas possíveis formas para contornar e ajustar os dados neste contexto: | + | duplicated(x) |
- | - Item de lista ordenada converter para números e multiplicar por mil<code R> | + | x[!duplicated(x)] |
- | pcPesq$V2 | + | x[duplicated(x)] |
- | as.numeric(pcPesq$V2) | + | </code> |
- | as.numeric(pcPesq$V2)*1000 | + | |
- | ## agora automatizando para fazer em todas as colunas necessárias | + | Representação de números e ponto flutuante.\\ |
- | Pesq <- as.data.frame(lapply(pcPesq, function(x){if(is.character(x)) x <- as.numeric(x)*1000; return(x)})) | + | ''isTRUE'' deve se usado para testar condições dentro de funções. |
- | Pesq</code> | + | |
- | - Eliminando o caracter "." (por substituição de caracteres. | + | |
<code R> | <code R> | ||
- | Pesq1 <- as.data.frame(lapply(pcPesq, function(x){ | + | .1 == .3/3 |
- | if(!is.numeric(x) & !is.integer(x)) x <- as.numeric(gsub("\\.", "", x)) | + | all.equal(.1, .3/3) |
- | return(x)})) | + | isTRUE(all.equal(0.1, .3/3)) |
+ | identical(.1, .3/3) | ||
</code> | </code> | ||
- | Agora lendo os indicadores de estudantes e depois unir tudo em um único objeto | + | Mais coisas que deveriam ser iguais... mas não exatamente são ... |
<code R> | <code R> | ||
- | pcEst <- read.table("clipboard", sep="\t", dec=",", strip.white=T, as.is=T) | + | seq(0, 1, by=0.1) == 0.3 |
- | head(pcEst) | + | |
- | Est <- as.data.frame(lapply(pcEst, function(x){if(is.character(x)) x <- as.numeric(x)*1000; return(x)})) | + | x <- c(.3, 0.4 - 0.1, 0.5 - 0.2, 0.6 - 0.3, 0.7 - 0.4) |
- | Est | + | x |
+ | unique(x) | ||
+ | </code> | ||
- | Pesq$Autor <- "Pesquisador" | + | Um exemplo com uma função para resolver equação do 2o grau: |
- | Est$Autor <- "Estudante" | + | <code R> |
+ | eq2g <- function(a, b, c){ | ||
+ | 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)) | ||
+ | } | ||
- | ProdC <- rbind(Pesq, Est) | + | print(eq2g(1, -5, 6), dig=16) |
- | ProdC | + | |
- | head(ProdC) | + | eq2g(1, c(-5, 1), 6) |
- | 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**\\ | + | eq2g(1, -5, 6) - c(2, 3) |
- | 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/3, 6/3) |
- | <code R> | + | |
- | ## produção total, somando pesquisadores e estudantes | + | |
- | aggregate(Autores ~ Ano, data=ProdC, sum) | + | |
- | plot(aggregate(Autores ~ Ano, data=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 | + | print(eq2g(1/3, -5/3, 6/3), dig=16) |
- | Totais <- aggregate(. ~ Ano, data=ProdC[,-9], sum) | + | |
- | matplot(Totais[,1], Totais[,-1], type="l") | + | |
- | names(Totais) | + | eq2g(1/3, -5/3, 6/3) - c(2, 3) |
+ | </code> | ||
- | 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), | ||
- | xlab="Ano", ylab="Quantidade", main="Produção Científica") | ||
- | legend("topleft", names(Totais)[-1], col=c(1, 2, 2, 3, 4, 4, 5), lty=c(1,1,2,1,1,2,5)) | ||
- | ## agora separando entre Pesquisadores e Estudantes | + | <fs medium>Objetos crescentes, substituição der valores e criação direta de vetores</fs> |
- | ## gráficos podem ser feitos de várias formas, aqui alguns exemplos | + | |
- | with(ProdC, plot(Autores ~ Ano, type="n")) | + | |
- | with(ProdC, text(Ano, Autores, substr(Autor, 1, 1)) | + | |
- | with(ProdC, coplot(Autores ~ Ano|Autor, type="b")) | + | Os tempos de execução podem ser substancialmetne diferentes!! |
- | with(ProdC, coplot(Autores ~ Ano|Autor, type="b", show.given=F)) | + | <code R> |
+ | n<- 50000 | ||
- | 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 <- numeric(0) |
+ | for(i in 1:n) vec <- c(vec, i) | ||
+ | }) | ||
- | AU <- reshape(ProdC[,c(1,2,9)], idvar="Ano", v.name="Autores", timevar="Autor", direction="wide") | + | system.time({ |
- | matplot(AU[,1], AU[,-1], type="l", col=c(2,4), lty=1, main="Evolução do número de autores", | + | vec <- numeric(n) |
- | xlab="Ano", ylab="Número de Autores") | + | for(i in 1:n) vec[i] <- i |
- | legend("topleft", c("Pesquisadores","Estudandes"), col=c(2,4), lty=1) | + | }) |
- | </code> | + | |
- | II. Gráficos da biblioteca lattice | + | system.time({ |
- | <code R> | + | vec <- 1:n |
- | require(lattice) | + | }) |
</code> | </code> | ||
- | III. Gráficos da biblioteca ggplot | + | Onderm de operações |
<code R> | <code R> | ||
- | install.packages("ggplot2", dep=T) ## contributed package" - é necessário instalar! | + | x <- rnorm(10000, m=100, sd=10) |
- | require(ggplot2) | + | |
- | </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> | ||
- | |||
- |