====== Miscelânia de tópicos ====== Ordenação x <- rpois(10, lam=10) x sort(x) order(x) x[order(x)] x[rev(order(x))] args(order) order(x, decreasing=T) Representação e Manipulação de datas ## 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 ## opcoes disponíveis para exibição: # a A b B c d H I j m M p S U w W x X y Y z Z 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 ## ## 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") 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") 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 op <- options(digits.secs=3) z Precisão numérica/ponto flutuante Encontrando dados replicados, e não replicados x <- rpois(25, lam=5) x unique(x) duplicated(x) x[!duplicated(x)] x[duplicated(x)] Representação de números e ponto flutuante.\\ ''isTRUE'' deve se usado para testar condições dentro de funções. .1 == .3/3 all.equal(.1, .3/3) isTRUE(all.equal(0.1, .3/3)) identical(.1, .3/3) Mais coisas que deveriam ser iguais... mas não exatamente são ... 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) Um exemplo com uma função para resolver equação do 2o grau: 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)) } print(eq2g(1, -5, 6), dig=16) eq2g(1, c(-5, 1), 6) eq2g(1, -5, 6) - c(2, 3) eq2g(1/3, -5/3, 6/3) print(eq2g(1/3, -5/3, 6/3), dig=16) eq2g(1/3, -5/3, 6/3) - c(2, 3) Objetos crescentes, substituição der valores e criação direta de vetores Os tempos de execução podem ser substancialmetne diferentes!! 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 }) Onderm de operações x <- rnorm(10000, m=100, sd=10) system.time({ lsum <- 0 for(i in 1:length(x)){ lsum <- lsum + log(x[i]) } }) system.time(lsum <- sum(log(x))) c(log(12.3), log(16.7), log(18.3)) log(c(12.3, 16.7, 18.3))