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 Próxima revisão Ambos lados da revisão seguinte | ||
ridiculas [2011/07/04 16:52] walmes [section 2] |
ridiculas [2011/08/13 10:08] jcfaria [.Rprofile no Linux] |
||
---|---|---|---|
Linha 1: | Linha 1: | ||
- | ===== Ridículas - dicas curtas sobre R ===== | + | ===== R-idículas - dicas curtas sobre R ===== |
{{:nuvem.png?550 |}} | {{:nuvem.png?550 |}} | ||
- | **//Ridículas//** é a página do LEG dedicada à fornecer //dicas curtas// sobre R, e.g. condução de análises, operação com dados e confecção de gráficos. As dicas estão organizadas pelo título, seguido de descrição, palavras-chave e CMR (código mínimo reproduzível). Se você deseja contribuir com a nossa página de Ridículas, envie e-mail para ''walmes@ufpr.br''. | + | **//R-idículas//** é a página do LEG dedicada à fornecer //dicas curtas// sobre R, e.g. entre outras: otimização do ambiente, condução de análises, operação com dados e confecção de gráficos. As dicas estão organizadas pelo título, seguido de descrição, palavras-chave e CMR (código mínimo reproduzível). Se você deseja contribuir com a nossa página de R-idículas, envie e-mail para ''walmes@ufpr.br''. |
---- | ---- | ||
+ | |||
+ | ==== .Rprofile no Linux ==== | ||
+ | <code R> | ||
+ | #------------------------------------------------------------------------------------------ | ||
+ | # por JCFaria | ||
+ | #------------------------------------------------------------------------------------------ | ||
+ | </code> | ||
+ | |||
+ | Esse post tem a finalidade de compartilhar algumas coisas que considero importantes na inicialização do R no Linux! | ||
+ | |||
+ | Muitas das opções importantes, do ponto de vista funcional (não relativos à aparência), podem ser feitas no arquivo .Rprofile. | ||
+ | Esse arquivo deve ficar localizado no home do usuário (~/.Rprofile) e é um dos primeiros a ser lido quando uma sessão do | ||
+ | R é iniciada. | ||
+ | |||
+ | Tenho uma função (bem simples) que uso bastante em meu dia a dia: "cv" para calcular o coef. de variação de uma ANOVA: | ||
+ | |||
+ | <code R> | ||
+ | cv <- function(av) | ||
+ | { | ||
+ | if(is.null(av) || !inherits(av, 'aov')) | ||
+ | stop('Please, check the parameter!') | ||
+ | qmee <- with(av, sum(residuals^2) / df.residual) | ||
+ | cv <- 100 * sqrt(qmee) / mean(av$fitted.values) | ||
+ | return(round(cv, 2)) | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Pois bem, a medida que vamos aumentando nossa intimidade com o R (inevitavelmente) iremos desenvolvendo nossas próprias | ||
+ | funções (o R foi projetado para isso). | ||
+ | |||
+ | <fc #000080>Ai vem o problema: ter que sempre carregar a função quando for usar, o que pode se tornar uma chatisse! | ||
+ | Pior ainda, ao limpar o workspace do usuário (.GlobalEnv) ela é removida e precisa ser recarregada. Imagine o contexto da necessidade de várias funções, que é o que geralmente acontece com o passar do tempo ...</fc> | ||
+ | |||
+ | <fc #000080>**Tem como contornar? Sim! De várias formas:**</fc> | ||
+ | |||
+ | **//1. Opção muito pouco prática://** | ||
+ | <code R> | ||
+ | oldp <- getwd() | ||
+ | setwd('/home/jcfaria/dados/r/funcoes/') | ||
+ | source('cv.r') | ||
+ | setwd(oldp) | ||
+ | </code> | ||
+ | |||
+ | A função "cv" ficará disponível no meu workspace mas será removida com a instrução: | ||
+ | |||
+ | <code R> | ||
+ | > rm(list=ls()) | ||
+ | </code> | ||
+ | |||
+ | muito usada por várias GUIs. | ||
+ | |||
+ | |||
+ | **//2. Opção mais prática://** | ||
+ | A mesma que a anterior, contudo, a função não deverá se chamar "cv", mas sim ".cv". | ||
+ | Nesse caso ela permanecerá como um objeto oculto no meu workspace e não será removida com a intrução: | ||
+ | |||
+ | <code R> | ||
+ | > rm(list=ls()) | ||
+ | </code> | ||
+ | |||
+ | Contudo, poderá ser removida com a intrução: | ||
+ | |||
+ | <code R> | ||
+ | > rm(list=ls(all=TRUE)) | ||
+ | </code> | ||
+ | |||
+ | |||
+ | **//3. Colocando suas funções em algum ambiente (environment) do R (optei pelo base)://** | ||
+ | <code R> | ||
+ | oldp <- getwd() | ||
+ | setwd('/home/jcfaria/dados/r/funcoes/') | ||
+ | source('cv.r', local=baseenv()) | ||
+ | setwd(oldp) | ||
+ | </code> | ||
+ | |||
+ | Ela não ficará no meu workspace, mas sim no base. | ||
+ | Como tal, poderá ser usada com qualquer outra função desse pacote. | ||
+ | |||
+ | |||
+ | **//4. Criando seu próprio ambiente (acho a solução mais elegante)://** | ||
+ | <code R> | ||
+ | oldp <- getwd() | ||
+ | setwd('/home/jcfaria/dados/r/funcoes/') | ||
+ | .jcf <- new.env() | ||
+ | source('cv.r', local=.jcf) | ||
+ | setwd(oldp) | ||
+ | </code> | ||
+ | |||
+ | Nesse último caso [**//4//**]: | ||
+ | * O objeto ".jcf" ficará oculto no meu workspace evitando ser deletado com: rm(list=ls()) | ||
+ | * Parar acessar a função "cv" é necessário: | ||
+ | |||
+ | <code R> | ||
+ | > .jcf$cv | ||
+ | |||
+ | # ou | ||
+ | |||
+ | > with(.jcf, cv) | ||
+ | </code> | ||
+ | |||
+ | Por exemplo: | ||
+ | <code R> | ||
+ | > av <- aov(Sepal.Length ~ Species, data=iris) | ||
+ | > .jcf$cv(av) | ||
+ | [1] 8.81 | ||
+ | |||
+ | # ou | ||
+ | |||
+ | > with(.jcf, cv(av)) | ||
+ | [1] 8.81 | ||
+ | </code> | ||
+ | |||
+ | Esta forma de carregar funções de forma permanente no R pode ser usado para qualquer outro objeto! | ||
+ | |||
+ | No Windows bastava usar no /etc/Rprofile.site: | ||
+ | |||
+ | <code R> | ||
+ | source('cv', local=TRUE) | ||
+ | </code> | ||
+ | |||
+ | que ela ficava disponível no pacote base. | ||
+ | |||
+ | No Windows não testei na versão em desenvolvimento (instável) que uso no Linux, | ||
+ | mas deve funcionar, pois usei por muitos anos em várias versões. | ||
+ | |||
+ | Abaixo meu .Rprofile: | ||
+ | <code R> | ||
+ | ## José Cláudio Faria/UESC/DCET | ||
+ | |||
+ | ##¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ | ||
+ | ## General options | ||
+ | library(utils) | ||
+ | options(list(repos='http://cran-r.c3sl.ufpr.br/', | ||
+ | width=80, | ||
+ | editor='vim', | ||
+ | browser='chromium')) | ||
+ | |||
+ | ##¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ | ||
+ | ## Package debug: options | ||
+ | options(list(debug.height=10, | ||
+ | debug.width=125, | ||
+ | debug.screen.pos='-1680+00' # dois monitores! | ||
+ | )) | ||
+ | |||
+ | ##¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ | ||
+ | ## Funtions: myself | ||
+ | oldp <- getwd() | ||
+ | setwd('/home/jcfaria/dados/r/funcoes/') | ||
+ | #source('fitreg.r', local=baseenv()) | ||
+ | #source('fitregl.r', local=baseenv()) | ||
+ | #source('fitrlcor.r', local=baseenv()) | ||
+ | #source('plotreg.r', local=baseenv()) | ||
+ | #source('plotrl.r', local=baseenv()) | ||
+ | #source('plotlm3d.r', local=baseenv()) | ||
+ | #source('cv.r', local=baseenv()) | ||
+ | #source('rs.r', local=baseenv()) | ||
+ | #source('sourcedir.r', local=baseenv()) | ||
+ | |||
+ | .jcf <- new.env() | ||
+ | source('fitreg.r', local=.jcf) | ||
+ | source('fitregl.r', local=.jcf) | ||
+ | source('fitrlcor.r', local=.jcf) | ||
+ | source('plotreg.r', local=.jcf) | ||
+ | source('plotrl.r', local=.jcf) | ||
+ | source('plotlm3d.r', local=.jcf) | ||
+ | source('cv.r', local=.jcf) | ||
+ | source('rs.r', local=.jcf) | ||
+ | source('sourcedir.r', local=.jcf) | ||
+ | |||
+ | ##¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ | ||
+ | ## Removing variables | ||
+ | setwd(oldp) | ||
+ | rm(oldp) | ||
+ | |||
+ | ##¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ | ||
+ | ## Packages: loading | ||
+ | #library(fdth) | ||
+ | #library(ScottKnott) | ||
+ | #library(bpca) | ||
+ | #library(TukeyC) | ||
+ | #library(reshape) | ||
+ | #library(debug) | ||
+ | attach(.jcf) | ||
+ | </code> | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== Como fazer a justaposição de vários data.frames ==== | ||
+ | |||
+ | Temporariamente sem descrição.\\ | ||
+ | palavras-chave: #merge, #Reduce. | ||
+ | |||
+ | <code R> | ||
+ | #------------------------------------------------------------------------------------------ | ||
+ | # por Walmes | ||
+ | #------------------------------------------------------------------------------------------ | ||
+ | |||
+ | id <- 1:30 # número único que identifica os registros | ||
+ | n <- 20 # número de registros por data.frame | ||
+ | |||
+ | a1 <- data.frame(id=sample(id, n), v1=rnorm(n)) # resposta 1 | ||
+ | a2 <- data.frame(id=sample(id, n), v2=rpois(n,10)) # resposta 2 | ||
+ | a3 <- data.frame(id=sample(id, n), v3=runif(n)) # resposta 3 | ||
+ | |||
+ | merge(a1, a2, by="id") # justapõe 2 data.frames de cada vez | ||
+ | |||
+ | a0 <- list(a1, a2, a3) # cria uma lista com todos os data.frames | ||
+ | |||
+ | |||
+ | Reduce(function(x, y) merge(x, y, by="id"), a0, accumulate=FALSE) # justapõe todos | ||
+ | |||
+ | #------------------------------------------------------------------------------------------ | ||
+ | # font: http://rwiki.sciviews.org/doku.php?id=tips:data-frames:merge | ||
+ | # https://stat.ethz.ch/pipermail/r-help/2008-April/160836.html | ||
+ | # http://econometricsense.blogspot.com/2011/01/merging-multiple-data-frames-in-r.html | ||
+ | # http://www.youtube.com/watch?v=E4uR5I1uLFM | ||
+ | |||
+ | #------------------------------------------------------------------------------------------ | ||
+ | </code> | ||
+ | |||
+ | ---- | ||
+ | |||
==== Gráfico de valores observados e curva de valores preditos para modelo linear generalizado ==== | ==== Gráfico de valores observados e curva de valores preditos para modelo linear generalizado ==== | ||
Linha 1361: | Linha 1584: | ||
hx <- seq(media+2*stder, media+3*stder, .01) | hx <- seq(media+2*stder, media+3*stder, .01) | ||
hy <- dnorm(hx, media, stder) | hy <- dnorm(hx, media, stder) | ||
- | n <- length(hy) | + | n <- |
+ | length(hy) | ||
polygon(c(hx, rev(hx)), c(hy, rep(0, n)), col=2) | polygon(c(hx, rev(hx)), c(hy, rep(0, n)), col=2) | ||
</code> | </code> | ||