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.
Próxima revisão | Revisão anterior | ||
cursos:mct:exemplo5 [2011/05/06 00:44] paulojus criada |
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 small>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) | + | x |
- | 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(x, decreasing=T) | |
- | ## uma forma não muito adequada: | + | |
- | solve(t(X) %*% X) %*% t(X) %*% y | + | |
- | + | ||
- | ## outra melhor: | + | |
- | solve(crossprod(X), crossprod(X, y)) | + | |
</code> | </code> | ||
- | <fs small>Representação e Manipulação de datas</fs> | + | <fs medium>Representação e Manipulação de datas</fs> |
<code R> | <code R> | ||
- | Sys.time() | + | ## transformando caracteres em datas |
+ | 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 | ||
- | format(as.Date("4/02/2011 03:24:13", "%d/%m/%Y %H:%M:%S"), "%j") | + | ## opcoes disponíveis para exibição: |
- | format(as.Date(Sys.time(), "%d/%m/%Y %H:%M:%S"), "%j") | + | |
# a A b B c d H I j m M p S U w W x X y Y z Z | # a A b B c d H I j m M p S U w W x X y Y z Z | ||
- | x <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960") | + | Sys.time() |
+ | format(as.Date(Sys.time(), "%d/%m/%Y %H:%M:%S"), "%j") | ||
+ | |||
+ | ## as datas podem ser fornecidas de outras maneiras... | ||
+ | x <- c("25set1967", "28set1969", "30jan2003", "05jul2004") | ||
z <- strptime(x, "%d%b%Y") | z <- strptime(x, "%d%b%Y") | ||
z | z | ||
+ | ## | ||
+ | ## Ver detalhes aqui!!! | ||
+ | ## | ||
+ | ## e note a confusão com a omisão do século !!! | ||
+ | x <- c("1jan90", "2jan90", "31mar90", "30jul90") | ||
+ | z <- strptime(x, "%d%b%y") | ||
+ | z | ||
+ | x <- c("25set67", "28set69", "30jan03", "05jul04") | ||
+ | z <- strptime(x, "%d%b%y") | ||
+ | z | ||
+ | |||
+ | ## concatenando datas e horarios para formar registros únicos | ||
dates <- c("02/27/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92") | dates <- c("02/27/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92") | ||
times <- c("23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26") | times <- c("23:03:20", "22:29:56", "01:03:30", "18:21:03", "16:56:26") | ||
Linha 36: | Linha 53: | ||
strptime(x, "%m/%d/%y %H:%M:%S") | strptime(x, "%m/%d/%y %H:%M:%S") | ||
- | ## fracoes de segundos | + | dt2 <- strptime(x, "%m/%d/%y %H:%M:%S") |
+ | format(dt2, "%c") | ||
+ | |||
+ | dt2 <- sort(dt2) | ||
+ | dt2 | ||
+ | |||
+ | diff(dt2) | ||
+ | |||
+ | ## frações de segundos | ||
z <- strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS") | z <- strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS") | ||
z | z | ||
Linha 43: | Linha 68: | ||
</code> | </code> | ||
- | <fs small>Lendo dados 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> | ||
- | s1 <- scan() | + | x <- rpois(25, lam=5) |
+ | x | ||
+ | unique(x) | ||
- | 12 13 14 | + | duplicated(x) |
- | 21 21 14 | + | x[!duplicated(x)] |
- | 12 31 25 | + | x[duplicated(x)] |
- | 15 32 29 | + | </code> |
- | s1 <- scan("clipboard") | + | Representação de números e ponto flutuante.\\ |
+ | ''isTRUE'' deve se usado para testar condições dentro de funções. | ||
+ | <code R> | ||
+ | .1 == .3/3 | ||
+ | all.equal(.1, .3/3) | ||
+ | isTRUE(all.equal(0.1, .3/3)) | ||
+ | identical(.1, .3/3) | ||
+ | </code> | ||
- | d1 <- read.table("clipboard") | + | Mais coisas que deveriam ser iguais... mas não exatamente são ... |
- | d1 | + | <code R> |
+ | seq(0, 1, by=0.1) == 0.3 | ||
+ | x <- c(.3, 0.4 - 0.1, 0.5 - 0.2, 0.6 - 0.3, 0.7 - 0.4) | ||
+ | x | ||
+ | unique(x) | ||
+ | </code> | ||
- | ## | + | Um exemplo com uma função para resolver equação do 2o grau: |
- | ## exemplos de leitura e manipulacao para ajustes | + | <code R> |
- | ## | + | eq2g <- function(a, b, c){ |
- | ## site MCT --> indicadores | + | 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)) | ||
+ | } | ||
- | ## Producao cientifica, tabela 5.1 (pesquisadores) | + | print(eq2g(1, -5, 6), dig=16) |
- | pcPesq <- read.table("clipboard", sep="\t", dec=",") | + | eq2g(1, c(-5, 1), 6) |
- | head(pcPesq) | + | |
- | pcPesq <- read.table("clipboard", sep="\t", dec=",", strip.white=T, as.is=T) | + | eq2g(1, -5, 6) - c(2, 3) |
- | head(pcPesq) | + | |
- | str(pcPesq) | + | eq2g(1/3, -5/3, 6/3) |
- | ptMil <- function(x){ | + | print(eq2g(1/3, -5/3, 6/3), dig=16) |
- | if(!is.numeric(x) & !is.integer(x)) return(as.numeric(gsub("\\.", "", x))) | + | |
- | else return(x) | + | eq2g(1/3, -5/3, 6/3) - c(2, 3) |
- | } | + | </code> |
- | pcPesq <- as.data.frame(lapply(pcPesq, ptMil)) | + | |
+ | |||
+ | <fs medium>Objetos crescentes, substituição der valores e criação direta de vetores</fs> | ||
+ | |||
+ | Os tempos de execução podem ser substancialmetne diferentes!! | ||
+ | <code R> | ||
+ | n<- 50000 | ||
+ | |||
+ | system.time({ | ||
+ | vec <- numeric(0) | ||
+ | for(i in 1:n) vec <- c(vec, i) | ||
+ | }) | ||
+ | |||
+ | system.time({ | ||
+ | vec <- numeric(n) | ||
+ | for(i in 1:n) vec[i] <- i | ||
+ | }) | ||
+ | |||
+ | system.time({ | ||
+ | vec <- 1:n | ||
+ | }) | ||
+ | </code> | ||
+ | |||
+ | Onderm de operações | ||
+ | <code R> | ||
+ | x <- rnorm(10000, m=100, sd=10) | ||
- | ## Dados socio economicos --> 9.1 | + | system.time({ |
- | ScEc <- read.table("clipboard", dec=",", sep="\t", na.strings="\\u2026 ") | + | lsum <- 0 |
- | head(ScEc) | + | for(i in 1:length(x)){ |
+ | 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> |