====== 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))