Nova Versão R liberada

stupidDarkness

O R team anunciou no último dia 21/04 a última versão do R codinome “You stupid Darkness”. Esta versão tem focado em melhoria da performance do R. Você pode acompanhar as principais mudanças aqui.  Atualização para a nova versão pode ser feitas conforme dicas já postadas aqui.

Mais informações podem ser encontradas aqui

Até a próxima dica.

Anúncios
Publicado em Regressões | Deixe um comentário

Medindo Área de Olho de lombo por imagens digitais – Integrando ImageJ e R

ezgif.com-optimize

A área do músculo Longissimus dorsi (Área de olho de lombo, AOL), é um importante indicador da qualidade e composição dos cortes da carcaça, sendo muita utilizada nos processos de seleção genética e avaliação de planos nutricionais e manejo. A medida da AOL pode ser realizada por diferentes métodos, sendo o ultrassonográfico, geométrico e grade  os mais comuns.

É possível medir a AOL através de fotografias digitais do corte, através  do processamento de imagens digitais (PID). Esse método apresenta características do método grade e ultrassonográfico e possui vantagens relacionados a acurácia, redução de erros relacionados ao desenho ou contagem de pontos internos e da borda (método grade), baixo custo, repetibilidade de leitura.

No post de hoje vou mostrar como medir a AOL através de processamento de imagens utilizando o software ImageJ e o editor Bio7, para posterior análise no R.

O software ImageJ é uma poderosa ferramenta Open Source e gratuita, desenvolvida para análise de imagens científicas digitais. Com essa ferramenta é possível medir a área ,distância ,ângulos, contagens, além dos processamentos comuns como transformações geométricas (mudanças de escla, rotações e giros), zoom, histrogramas, processamento de cores , etc.

Bio7 é um ambiente de desenvolvimento integrado, baseado no famoso editor Eclipse (muito comum entre desenvolvedores Java), que oferece uma série de ferramentas para desenvolvimento de modelos, análise de imagens científicas e análise estatística no R. é possível como o Bio7 integrar consoles R, Python, Java, Groovy, Jython, BeanShell, criar e visualizar modelso 3d OpenGL entre outros.  Ademais as características citada, a que nos interessa para o post de hoje é a possibilidade de transferir os resultados das análises realizadas como o software imageJ para o R diretamente através do Bio7. Essa possibilidade torna a experiência de medir a AOL e analisar os resultados no R workspace, bem mais rápida e agradável.

Passos para realização da análise

  1. Preparo das Imagens

Ao retirar as fotografias alguns cuidados são necessários para que as medidas da AOL realizadas na fotografia sejam fiéis as medidas tomadas no objeto real.  As principais medidas a serem tomadas são:

  •  Evitar fotos tremidas, desfocadas  ou muito distantes do objeto a ser medido
  • A câmera deve estar em linha reta (Formar um ângulo de 90º) com a AOL a ser fotografada. Evite angulações entre a linha da câmera e a face do músculo.
  • fotografia
  • Um objeto de comprimento conhecido deve compor a foto e deve ser colocado no mesmo plano (mesma distância da câmera que o objeto a ser fotografado) da AOL a ser fotografaca. Esse objeto pode ser uma régua ou qualquer outro objeto cuja dimensão seja conhecida. Nas imagens abaixo a foto da esquerda está incorreta, pois o objeto de dimensão conhecida (fita verde) e o objeto a ser analisado (AOL) não encontram-se a mesma distância da câmera fotográfica. A fotografia da direita está correta, pois o objeto de dimensão conhecida e a AOL encontram-se a mesma distância da câmera.

    2. Instale o Bio7

  • Baixe o Bio7: http://bio7.org/
  • Descompacte (extraia) o arquivo Bio7 no diretório de sua escolha
  • Clique no arquivo executável Bio7 (o programa ja está compilado e pronto para execução)

link para o vídeo com instruções: https://www.dropbox.com/s/puh6h3dmkwx1k0p/bio7a.mp4?dl=0

3. Instale o ImageJ

4. Instale o R package  {Rserve}

install.packages ("Rserve")

5. Obtendo a medida da AOL

Para medir a AOL siga os passos do vídeo que preparei:

https://www.dropbox.com/s/irprczod0a9g7ka/AOL4.mp4?dl=0

No vídeo utilizo imagens da AOL de diferentes espécies (suíno, bovino e caprino) para mostrar a dinâmica da realização. As imagens foram retiradas aleatoriamente da internet e atendem aos requerimentos necessários para análise. Porém  não disponho das medidas obtidas por outros métodos (grade, ultrassom) para comparação. Procedimento semelhante no entanto foi avaliado por Ferreira et al (2012), porém esses autores avaliaram o desenho escaneado da AOL sobre papel milimetrado e análise em software de processamento de imagens e compararam com outros métodos (Grade e Geométrico) encontraram alta acurácia e precisão das estimativas da AOL sendo por isso recomendado.  No método proposto nesse post a medida é tomada diretamente sobre a imagem da AOL, eliminando as etapas de desenho e escaneamento, reduzindo a chance de erros, aumentando a praticidade e rapidez das medidas.

basicamente o processo constitui de 4 partes

  1.  Abrir o modo ImageJ do Bio7 e importar a imagem a ser analisada
  2. Ajustar a escala de análise do ImageJ, informando o tamanho real do objeto de tamanho conhecido que compõe a imagem
  3.  Selecionar a área da imagem que deseja ser medido e ordenar ao software que obtenha a área
  4. Transferir o resultado para o workspace do R para análise

Espero que tenham gostado.

Até a próxima dica.

 

 

Publicado em Aplicacao, Dicas R | Deixe um comentário

R 3.3.3 (“Another Canoe”) liberada

364b69eeee7c69f38a1a46653d243cdeNova atualização do software R 3.3.3  codenome “Another Canoe” foi liberada.  Vocês podem atualizar  aqui.

Informações sobre mudanças nesta última atualização podem ser vistas aqui.

Publicado em Regressões | Deixe um comentário

Venha aprender R!

Cursos de introdução e análise de experimentos através da linguagem R.

Cursos presenciais a distância via web conferências ( Aprenda no conforto de sua casa!), flexibilidade de dia e horários.

Aprenda de maneira dinâmica, praticando as habilidades recém adquiridas.

Ensino através de exercícios voltados a seus interesses  e  orientações personalizadas.

postercursor

Publicado em Regressões | Deixe um comentário

Nova versão do R Liberada

O CcharliebrownRAN recentemente anunciou o lançamento da última atualização do R 3.3.2 sobre o codenome “Sincere Pumpkin Patch”. Este codenome foi inspirado pela data de liberação da atualização que coincidiu com o dia das bruxas (31/10), fazendo referência  ao vídeo de charlie brown “It’s the Great Pumpkin“.  Essa liberação não vem acompanhada de muitas modificações significativas em relação à anterior 3.3.1, as modificações podem ser vistas aqui. Atualizações para a nova versão podem ser feitas conforme as seguintes intruções

Publicado em R Notícias | Deixe um comentário

Meta análise Nutrição animal (Abordagem R do Artigo St Pierre (2001))

meta-analiseEm 2001 N.R St-Pierre publicou uma revisão a convite do periódico Dairy Science intitulada “Integrating Quantitative Findings from Multiple Studies Using Mixed Model Methodology” onde discorreu sobre  o uso de meta-análise para integrar achados científicos. O artigo foi muito bem aceito pela comunidade científica, segundo dados do site scopo preview, houve 322 citações desse artigo. No Brasil, alguns artigos elaborados foram baseados nessas recomendações (Azevedo et al,2010,Vieira et al,2013, Souza,2013).

Embora a meta análise seja algo muito mais complexo que o expresso no artigo e os comandos apresentados não devem ser utilizados roboticamente, ou seja, como uma receita de bolo, esse artigo possui um elevado valor didático para quem quer iniciar seus estudos sobre a técnica de meta anáise.

Acessei esse artigo em 2011, naquela época queria refazer os comandos do artigo no software R, pois estava iniciando o interesse pela meta-análise. No início tive dificuldades, pois não chegava aos mesmos resultados do artigo o que esfriou o projeto de refazê-lo. Logo, descobri que o banco de dados que o autor apresenta ao final do artigo não era o mesmo utilizado para gerar os resultados. Agradeço, ao amigo Luigi Cavalcanti por ter conseguido o banco de dados correto com o pŕopio St Pierre.

Recentemente, encontrei o R-script que havia feito na época e  decidi finalizá-lo e compartilhá-lo aqui no blog, na esperança que aqueles que se interessam também pela meta-análise possam iniciar seus estudos utilizando o R.

Há muitas mais coisas  para se discutir sobre meta análise além do que está no artigo em questão. Assim, pretendo em posts futuros discutí-los no blog.

No post de hoje mostrarei os principais comandos do artigo e as peculiaridades do R para se chegar aos resultados.

Até o próximo post!

#--------------------Pacotes utilizados-------------------------
#  install.packages(c("nlme","car","multcomp","lattice"))
library(nlme)
library(car)
library(multcomp)
library(lattice)
library(lmmfit) #Este arquivo foi removido do repositorio CRAN. Para instalá-lo baixe a versão
#antiga neste endereço: "https://cran.r-project.org/src/contrib/Archive/lmmfit/" e instale-o
#No linux: install.packages("~/Downloads/lmmfit_1.0.tar.gz", repos = NULL, type = "source") ou
# No windows: install.packages("c:\users\nome do usuário\Downloads/lmmfit_1.0.tar.gz", repos = NULL, type = "source")
#Substitua "nome do usuário" pelo nome de usuário do seu sistema.
#----------------------------------------------------------------------------------
DATA<-read.csv("https://www.dropbox.com/s/hibr0cfu91u6xxz/St_Pierre.csv?raw=1")
dados<-groupedData(Y~X|Study,data=DATA)
Lista<-lmList(Y~X,data=dados)
Lista # lista os parametros das regressões
#-------------------------------------------------------------------------------------------#
xyplot(Y~X,DATA) # Gráfico 2a
xyplot(Y~X, groups=Study,type="l",auto.key=list(space="right",title="Estudo"),DATA) #Grafico 2b
#################################################################################
# Modelo que não leva em consideração o efeito dos estudo
#################################################################################
#-------------------------------Figura 3-----------------------------------------
RegSimples<-gls(Y~X,data=dados)#considera os efeitos fixos sem considerar o efeito do estudo
summary(RegSimples)
anova(RegSimples,type="marginal",adjustSigma=F) # Soma de quadrado tipo III
anova(RegSimples,type="sequential",adjustSigma=F) # Soma de quadrado tipo I (sequencial)

#---------------------------------------------------------------------------------------
#Alguns gráficos úteis para avaliar o modelo
#---------------------------------------------------------------------------------------
#Residuos por estudo não estão centrados em zero
plot(RegSimples,Study~resid(.),abline=0,id=0.05,adj=-0.3)
# Gráfico útil para observar onde se encontram os efeitos aleatórios.
# Efeitos aleatórios associados ao intercepto e inclinação (intervalos não se sobrepoem)
plot(intervals(Lista2))

#------------------------------R2 modelo gls ---------------------------------------
#---------------------Função permite estimar o R2 para objetos gls------------------
R2<-function(gnls.obj){
da<-eval(getData(gnls.obj)[,1:2])
resp.name<-all.vars(formula(gnls.obj))
form<-paste(resp.name, "~1", sep="")
m0 <-lm(form, da)
sqn <-sum(resid(gnls.obj)^2)
sqe <-deviance(m0)
r2 <-1-(sqn/sqe)
return(list(R2=r2))
}

R2(RegSimples)
#--------------------------------figura 4 e 5--------------------------------------
plot(RegSimples,Y~X,xlim=c(0,12),ylim=c(-4,20),key=list(corner=c(0.10,0.90),text=list(c("y=a+bx (a=0,b=1)","Y=-5.187620 + 1.959493.X","R²=0.79")),lines=list(lty=c(2,1,0),col=c(1,2,0))),
panel = function(x, y,...) { # Figura 4
panel.xyplot(x,y, ...)
panel.lmline(x,y,col=2,...)
panel.abline(a=c(0.0,1.0),lty=2)
})

plot(RegSimples,resid(.)~X,abline=0,ylab="Predito-Observado",xlab="Predito")#Figura 5
#############################################################################
# Modelo considera o efeito do estudo fixo
################################################################################
#Por padrão o contraste do R é o contr.treatment o qual compara os níveis dos tratamentos
#com o nível base (o primeiro nível). Ele difere do tipo de contraste utilizado
#pelo software SAS, o qual utiliza como base de comparação o último nível ( e não o primeiro
#como ocorre no R). Entender o tipo de contraste utilizado por cada software é importante pois
# impede erros de interpretação dos resultados. Por questões didáticas, modificaremos o tipo
#de contraste padrão do R (função options) para fatores ordenados para "contr.SAS" (o padrão é contr.poly).
#=========================Análise e Resultado (Figura 6)================================
options(contrasts=c(factor="contr.SAS",ordered="contr.SAS"))
RegFixo<-gls(Y~X*Study,data=dados)
(resultado<-summary(RegFixo,verbose=TRUE))
(anovaIII<-anova(RegFixo,type="marginal",adjustSigma=FALSE))
(anovaI<-anova(RegFixo))
R2(RegFixo)
#---------------------------------------------------------------------------------
#-------Obter estimativas do intercepto e inclinação média por estudo--------
#--------------------------------------------------------------------------------
m0 <-gls(Y~0+Study/X,dados)
(LSMEANS<-summary(m0)) # Estimativas de inclinações (efeito de X) para cada estudo
## Matriz de pesos.
#--------------------------------------------------------------
# Estima o intercepto global e testa se seu valor é igual a zero
m<-rbind(rep(1, nlevels(dados$Study))/nlevels(dados$Study))
## Intercepto médio.
X <-cbind(m, 0*m)
GlobIntercept<-summary(glht(m0, linfct=X,rhs=c(0)), test=adjusted(type="none"))
#-------------------------------------------------------------
## Estima a inclinação global e testa se o valor é igual a 1
X1&lt;-cbind(0*m, m)
GlobSlope<-summary(glht(m0, linfct=X1,rhs=c(1)), test=adjusted(type="none")) #Testa se a inclinação do modelo
# é igual a zero.
#---------------------Resultados da figura 6-------------------------------------------------
(Figura6<-list(AnovaI=anovaI,AnovaIII=anovaIII,Resultado=resultado,Médias=LSMEANS,Intercepto_Global=OverIntercpt,Inclinação_Global=OverSlope))
#==================================================================================================
#-------------------------------Não tem no artigo--------------------------------------------------
# Compare este gráfico com o gráfico do modelo anterior. Veja como os resíduos estão mais centrados em zero
plot(RegFixo,Study~resid(.),abline=0,id=0.05,adj=-0.3)
plot(RegFixo,resid(.)~X,abline=0,ylab="Predito-Observado",xlab="Predito")
#--- Compare os modelos pelo AIC (menor melhor), modelo RegFixo preferível-----
anova(RegSimples,RegFixo)
#=====================================fim do resultado (figura 6)===============================
#===============================================================================================
#################################################################################
# MODELO CONSIDERA O EFEITO DO ESTUDO ALEATÓRIO
#################################################################################

# Método gráfico utilizado para determinar qual parâmetro do modelo deve ser incluído no modelo
#aleatório. Repare que os intervalos de confiança obtido para cada estudo não se
#sobrepoem para o intercepto e inclinação, indicando que tanto o intercepto quanto a inclinação devem ser incluídos no modelo aleatório
plot(intervals(Lista))
#---------------------Resultado (Figura 7)--------------------------------
RegMisto<-lme(fixed=Y~1+X,control=controle,random=~X|Study,data=dados,method="REML")
summary(RegMisto,verbose=T)
anova(RegMisto,type="marginal") #anova tipo II
R2(RegMisto)
#Figura 10
plot(RegMisto,fitted(.)~X,id=0.05,adj=0.3,key=list(corner=c(0.10,0.90),text=list(c("Y=-0.61(SE=0.56) + 1.097(SE=0.056).X","R²=0.99"))),
panel = function(x, y,...) {
panel.xyplot(x,y, ...)
panel.lmline(x,y,col=2,...)
})

#--------------------------Avaliação dos resíduos-----------------------------------------
plot(RegMisto,Study~resid(.),abline=0,id=0.05,adj=-0.3)
plot(RegMisto,resid(.)~X,abline=0,ylab="Predito-Observado",xlab="Predito")
#---------------Comparação entre os modelos------------------------------------------------
anova(RegSimples,RegFixo,RegMisto)
#Ops! Ao que parece para esses dados considerar efeito fixo do estudo leva a um
#modelo melhor que o modelo de efeito misto. Este com certeza não era o resultado esperado por St.Pierre
#mas como ele não compara os diferentes modelos em seu artigo, tal fato deve ter passado despercebido no momento
#em que os dados sintéticos foram gerados.Esse fato no entanto não prejudica o valor didático do artigo
#----------------------------------------------------------------------------
# No tópico "Expansion e Reducion" pg 749, o autor fala sobre situações
#onde é possível componentes de variancia e não de covariância serem
#significantes. Nesta situação podemos elaborar um modelo mais simples
#o qual considera a covariância igual a zero. O pacote lme não possui
#um teste de covariância dos parâmetros conforme realizado pelo autor
#utilizando o SAS. Entretanto o pacote lmmfit através da função
#structStep() permite escolher a melhor estrutura da matriz de
#variância-covariância atráves do critério AIC para modelos com um nível
#de agrupamento.

structStep(RegMisto) # pdDiag selecionando, idicando ser os efeitos aleatórios independentes. Esta estrutura é equivalente a estrutura VC utilizada pelo SAS o qual considera diferentes variâncias entre os parâmetros e covariância igual a zero
RegMistoDiag<-lme(fixed=Y~1+X,control=,na.action=na.omit,random=pdDiag(form=~1+X),data=dados,method="REML")
summary(RegMistoDiag,verbose=TRUE)
anova(RegMisto,RegMistoWeight2) # embora o teste L.ration não seja estatisticamente diferentes o modelo 2 é preferível por ter menor AIC

Publicado em Dicas R, Meta-Análise, Regressões | 2 Comentários

R-3.3.0.tar.gz (codename “Supposedly Educational”) liberado

RlogoO Time do Rproject anunciou na  Terça-Feira (03/05/2016)  a mais recente versão do software de análise estatística R.  Esta versão recebeu o título de  “Supposedly Educational” (Supostamente Educacional). Nos pŕoximos dias devem aparecer nos espelhos (“mirrors”) do CRAN de sua preferência para atualização.  Você pode instalá-lo manualmente a partir do código fonte http://cran.r-project.org/src/base/R-3/R-3.3.0.tar.gz.  Usuários Windows podem atualizar utilizando o código abaixo (Nova versão será instalada caso esteja disponível no CRAN mirrror:

install.packages(installr) # install
setInternet2(TRUE)
installr::updateR() # updating R.

 

Usuários Linux devem configurar seu arquivo sources.list para adicionar o seu CRAN mirror. A nova versão será instalada caso ela se encontre nos repositórios Debian e Ubuntu.

sudo gedit /etc/apt/sources.list # abre o arquivo sources.list
# adicione seu favorito cran-mirror e a versão de sua Linux distro. Para
# as versões mais recentes do Debian e Ubuntu são.
deb http://&lt;favourite-cran-mirror&gt;/bin/linux/debian jessie-cran3/
deb https://&lt;my.favorite.cran.mirror&gt;/bin/linux/ubuntu xenial/
sudo apt-get update
sudo apt-get upgrade

A lista com as mudanças são apresentadas abaixo:

CHANGES IN R 3.3.0:

SIGNIFICANT USER-VISIBLE CHANGES:

  • nchar(x, *)’s argument keepNA governing how the result for NAs in
    x is determined, gets a new default keepNA = NA which returns NA
    where x is NA, except for type = “width” which still returns 2,
    the formatting / printing width of NA.

  • All builds have support for https: URLs in the default methods
    for download.file(), url() and code making use of them.

Unfortunately that cannot guarantee that any particular https:
URL can be accessed. For example, server and client have to
successfully negotiate a cryptographic protocol (TLS/SSL, …)
and the server’s identity has to be verifiable via the
available certificates. Different access methods may allow
different protocols or use private certificate bundles: we
encountered a https: CRAN mirror which could be accessed by one
browser but not by another nor by download.file() on the same
Linux machine.

NEW FEATURES:

  • The print method for methods() gains a byclass argument.

  • New functions validEnc() and validUTF8() to give access to the
    validity checks for inputs used by grep() and friends.

  • Experimental new functionality for S3 method checking, notably
    isS3method().

Also, the names of the R ‘language elements’ are exported as
character vector tools::langElts.

  • str(x) now displays “Time-Series” also for matrix (multivariate)
    time-series, i.e. when is.ts(x) is true.

  • (Windows only) The GUI menu item to install local packages now
    accepts *.tar.gz files as well as *.zip files (but defaults to
    the latter).

  • New programmeR’s utility function chkDots().

  • D() now signals an error when given invalid input, rather than
    silently returning NA. (Request of John Nash.)

  • formula objects are slightly more “first class”: e.g., formula()
    or new(“formula”, y ~ x) are now valid. Similarly, for “table”,
    “ordered” and “summary.table”. Packages defining S4 classes with
    the above S3/S4 classes as slots should be reinstalled.

  • New function strrep() for repeating the elements of a character
    vector.

  • rapply() preserves attributes on the list when how = “replace”.

  • New S3 generic function sigma() with methods for extracting the
    estimated standard deviation aka “residual standard deviation”
    from a fitted model.

  • news() now displays R and package news files within the HTML help
    system if it is available. If no news file is found, a visible
    NULL is returned to the console.

  • as.raster(x) now also accepts raw arrays x assuming values in
    0:255.

  • Subscripting of matrix/array objects of type “expression” is now
    supported.

  • type.convert(“i”) now returns a factor instead of a complex value
    with zero real part and missing imaginary part.

  • Graphics devices cairo_pdf() and cairo_ps() now allow non-default
    values of the cairographics ‘fallback resolution’ to be set.

This now defaults to 300 on all platforms: that is the default
documented by cairographics, but apparently was not used by all
system installations.

  • file() gains an explicit method argument rather than implicitly
    using getOption(“url.method”, “default”).

  • Thanks to a patch from Tomas Kalibera, x[x != 0] is now typically
    faster than x[which(x != 0)] (in the case where x has no NAs, the
    two are equivalent).

  • read.table() now always uses the names for a named colClasses
    argument (previously names were only used when colClasses was too
    short). (In part, wish of PR#16478.)

  • (Windows only) download.file() with default method = “auto” and a
    ftps:// URL chooses “libcurl” if that is available.

  • The out-of-the box Bioconductor mirror has been changed to one
    using https://: use chooseBioCmirror() to choose a http:// mirror
    if required.

  • The data frame and formula methods for aggregate() gain a drop
    argument.

  • available.packages() gains a repos argument.

  • The undocumented switching of methods for url() on https: and
    ftps: URLs is confined to method = “default” (and documented).

  • smoothScatter() gains a ret.selection argument.

  • qr() no longer has a … argument to pass additional arguments to
    methods.

  • [ has a method for class “table”.

  • It is now possible (again) to replayPlot() a display list
    snapshot that was created by recordPlot() in a different R
    session.

It is still not a good idea to use snapshots as a persistent
storage format for R plots, but it is now not completely silly to
use a snapshot as a format for transferring an R plot between two
R sessions.

The underlying changes mean that packages providing graphics
devices (e.g., Cairo, RSvgDevice, cairoDevice, tikzDevice) will
need to be reinstalled.

Code for restoring snapshots was contributed by Jeroen Ooms and
JJ Allaire.

Some testing code is available at .

  • tools::undoc(dir = D) and codoc(dir = D) now also work when D is
    a directory whose normalizePath()ed version does not end in the
    package name, e.g. from a symlink.

  • abbreviate() has more support for multi-byte character sets – it
    no longer removes bytes within characters and knows about Latin
    vowels with accents. It is still only really suitable for (most)
    European languages, and still warns on non-ASCII input.

abbreviate(use.classes = FALSE) is now implemented, and that is
more suitable for non-European languages.

  • match(x, table) is faster (sometimes by an order of magnitude)
    when x is of length one and incomparables is unchanged, thanks to
    Peter Haverty (PR#16491).

  • More consistent, partly not back-compatible behavior of NA and
    NaN coercion to complex numbers, operations less often resulting
    in complex NA (NA_complex_).

  • lengths() considers methods for length and [[ on x, so it should
    work automatically on any objects for which appropriate methods
    on those generics are defined.

  • The logic for selecting the default screen device on OS X has
    been simplified: it is now quartz() if that is available even if
    environment variable DISPLAY has been set by the user.

The choice can easily be overridden via environment variable
R_INTERACTIVE_DEVICE.

  • On Unix-like platforms which support the getline C library
    function, system(*,intern = TRUE) no longer truncates (output)
    lines longer than 8192 characters, thanks to Karl Millar.
    (PR#16544)

  • rank() gains a ties.method = “last” option, for convenience (and
    symmetry).

  • regmatches(invert = NA) can now be used to extract both
    non-matched and matched substrings.

  • data.frame() gains argument fix.empty.names; as.data.frame.list()
    gets new cut.names, col.names and fix.empty.names.

  • plot(x ~ x, *) now warns that it is the same as plot(x ~ 1, *).

  • recordPlot() has new arguments load and attach to allow package
    names to be stored as part of a recorded plot. replayPlot() has
    new argument reloadPkgs to load/attach any package names that
    were stored as part of a recorded plot.

  • S4 dispatch works within calls to .Internal(). This means
    explicit S4 generics are no longer needed for unlist() and
    as.vector().

  • Only font family names starting with “Hershey” (and not “Her” as
    before) are given special treatment by the graphics engine.

  • S4 values are automatically coerced to vector (via as.vector)
    when subassigned into atomic vectors.

  • findInterval() gets a left.open option.

  • The version of LAPACK included in the sources has been updated to
    3.6.0, including those ‘deprecated’ routines which were
    previously included. Ca 40 double-complex routines have been
    added at the request of a package maintainer.

As before, the details of what is included are in
src/modules/lapack/README and this now gives information on
earlier additions.

  • tapply() has been made considerably more efficient without
    changing functionality, thanks to proposals from Peter Haverty
    and Suharto Anggono. (PR#16640)

  • match.arg(arg) (the one-argument case) is faster; so is
    sort.int(). (PR#16640)

  • The format method for object_size objects now also accepts
    “binary” units such as “KiB” and e.g., “Tb”. (Partly from
    PR#16649.)

  • Profiling now records calls of the form foo::bar and some similar
    cases directly rather than as calls to . Contributed
    by Winston Chang.

  • New string utilities startsWith(x, prefix) and endsWith(x,
    suffix). Also provide speedups for some grepl(“^…”,*) uses
    (related to proposals in PR#16490).

  • Reference class finalizers run at exit, as well as on garbage
    collection.

  • Avoid parallel dependency on stats for port choice and random
    number seeds. (PR#16668)

  • The radix sort algorithm and implementation from data.table
    (forder) replaces the previous radix (counting) sort and adds a
    new method for order(). Contributed by Matt Dowle and Arun
    Srinivasan, the new algorithm supports logical, integer (even
    with large values), real, and character vectors. It outperforms
    all other methods, but there are some caveats (see ?sort).

  • The order() function gains a method argument for choosing between
    “shell” and “radix”.

  • New function grouping() returns a permutation that stably
    rearranges data so that identical values are adjacent. The
    return value includes extra partitioning information on the
    groups. The implementation came included with the new radix
    sort.

  • rhyper(nn, m, n, k) no longer returns NA when one of the three
    parameters exceeds the maximal integer.

  • switch() now warns when no alternatives are provided.

  • parallel::detectCores() now has default logical = TRUE on all
    platforms – as this was the default on Windows, this change only
    affects Sparc Solaris.

Option logical = FALSE is now supported on Linux and recent
versions of OS X (for the latter, thanks to a suggestion of Kyaw
Sint).

  • hist() for “Date” or “POSIXt” objects would sometimes give
    misleading labels on the breaks, as they were set to the day
    before the start of the period being displayed. The display
    format has been changed, and the shift of the start day has been
    made conditional on right = TRUE (the default). (PR#16679)

  • R now uses a new version of the logo (donated to the R Foundation
    by RStudio). It is defined in .svg format, so will resize
    without unnecessary degradation when displayed on HTML
    pages-there is also a vector PDF version. Thanks to Dirk
    Eddelbuettel for producing the corresponding X11 icon.

  • New function .traceback() returns the stack trace which
    traceback() prints.

  • lengths() dispatches internally.

  • dotchart() gains a pt.cex argument to control the size of points
    separately from the size of plot labels. Thanks to Michael
    Friendly and Milan Bouchet-Valat for ideas and patches.

  • as.roman(ch) now correctly deals with more diverse character
    vectors ch; also arithmetic with the resulting roman numbers
    works in more cases. (PR#16779)

  • prcomp() gains a new option rank. allowing to directly aim for
    less than min(n,p) PC’s. The summary() and its print() method
    have been amended, notably for this case.

  • gzcon() gains a new option text, which marks the connection as
    text-oriented (so e.g. pushBack() works). It is still always
    opened in binary mode.

  • The import() namespace directive now accepts an argument except
    which names symbols to exclude from the imports. The except
    expression should evaluate to a character vector (after
    substituting symbols for strings). See Writing R Extensions.

  • New convenience function Rcmd() in package tools for invoking R
    CMD tools from within R.

  • New functions makevars_user() and makevars_site() in package
    tools to determine the location of the user and site specific
    Makevars files for customizing package compilation.

UTILITIES:

  • R CMD check has a new option –ignore-vignettes for use with
    non-Sweave vignettes whose VignetteBuilder package is not
    available.

  • R CMD check now by default checks code usage (via codetools)
    with only the base package attached. Functions from default
    packages other than base which are used in the package code but
    not imported are reported as undefined globals, with a suggested
    addition to the NAMESPACE file.

  • R CMD check –as-cran now also checks DOIs in package CITATION
    and Rd files.

  • R CMD Rdconv and R CMD Rd2pdf each have a new option
    –RdMacros=pkglist which allows Rd macros to be specified before
    processing.

DEPRECATED AND DEFUNCT:

  • The previously included versions of zlib, bzip2, xz and PCRE have
    been removed, so suitable external (usually system) versions are
    required (see the ‘R Installation and Administration’ manual).

  • The unexported and undocumented Windows-only devices cairo_bmp(),
    cairo_png() and cairo_tiff() have been removed. (These devices
    should be used as e.g. bmp(type = “cairo”).)

  • (Windows only) Function setInternet2() has no effect and will be
    removed in due course. The choice between methods “internal” and
    “wininet” is now made by the method arguments of url() and
    download.file() and their defaults can be set via options. The
    out-of-the-box default remains “wininet” (as it has been since R
    3.2.2).

  • [ into its own list such that the end result is roughly equivalent
    to using [[ S4 value will be coerced to a list with as.list().

  • Package tools’ functions package.dependencies(), pkgDepends(),
    etc are deprecated now, mostly in favor of package_dependencies()
    which is both more flexible and efficient.

INSTALLATION and INCLUDED SOFTWARE:

  • Support for very old versions of valgrind (e.g., 3.3.0) has been
    removed.

  • The included libtool script (generated by configure) has been
    updated to version 2.4.6 (from 2.2.6a).

  • libcurl version 7.28.0 or later with support for the https
    protocol is required for installation (except on Windows).

  • BSD networking is now required (except on Windows) and so
    capabilities(“http/ftp”) is always true.

  • configure uses pkg-config for PNG, TIFF and JPEG where this is
    available. This should work better with multiple installs and
    with those using static libraries.

  • The minimum supported version of OS X is 10.6 (‘Snow Leopard’):
    even that has been unsupported by Apple since 2012.

  • The configure default on OS X is –disable-R-framework: enable
    this if you intend to install under /Library/Frameworks and use
    with R.app.

  • The minimum preferred version of PCRE has since R 3.0.0 been 8.32
    (released in Nov 2012). Versions 8.10 to 8.31 are now deprecated
    (with warnings from configure), but will still be accepted until
    R 3.4.0.

  • configure looks for C functions __cospi, __sinpi and __tanpi and
    uses these if cospi etc are not found. (OS X is the main
    instance.)

  • (Windows) R is now built using gcc 4.9.3. This build will
    require recompilation of at least those packages that include C++
    code, and possibly others. A build of R-devel using the older
    toolchain will be temporarily available for comparison purposes.

During the transition, the environment variable R_COMPILED_BY has
been defined to indicate which toolchain was used to compile R
(and hence, which should be used to compile code in packages).
The COMPILED_BY variable described below will be a permanent
replacement for this.

  • (Windows) A make and R CMD config variable named COMPILED_BY has
    been added. This indicates which toolchain was used to compile R
    (and hence, which should be used to compile code in packages).

PACKAGE INSTALLATION:

  • The make macro AWK which used to be made available to files such
    as src/Makefile is no longer set.

C-LEVEL FACILITIES:

  • The API call logspace_sum introduced in R 3.2.0 is now remapped
    as an entry point to Rf_logspace_sum, and its first argument has
    gained a const qualifier. (PR#16470)

Code using it will need to be reinstalled.

Similarly, entry point log1pexp also defined in Rmath.h is
remapped there to Rf_log1pexp

  • R_GE_version has been increased to 11.

  • New API call R_orderVector1, a faster one-argument version of
    R_orderVector.

  • When R headers such as R.h and Rmath.h are called from C++ code
    in packages they include the C++ versions of system headers such
    as rather than the legacy headers such as .
    (Headers Rinternals.h and Rinterface.h already did, and inclusion
    of system headers can still be circumvented by defining
    NO_C_HEADERS, including as from this version for those two
    headers.)

The manual has long said that R headers should not be included
within an extern “C” block, and almost all the packages affected
by this change were doing so.

  • Including header S.h from C++ code would fail on some platforms,
    and so gives a compilation error on all.

  • The deprecated header Rdefines.h is now compatible with defining
    R_NO_REMAP.

  • The connections API now includes a function R_GetConnection()
    which allows packages implementing connections to convert R
    connection objects to Rconnection handles used in the API. Code
    which previously used the low-level R-internal getConnection()
    entry point should switch to the official API.

BUG FIXES:

  • C-level asChar(x) is fixed for when x is not a vector, and it
    returns “TRUE”/”FALSE” instead of “T”/”F” for logical vectors.

  • The first arguments of .colSums() etc (with an initial dot) are
    now named x rather than X (matching colSums()): thus error
    messages are corrected.

  • A coef() method for class “maov” has been added to allow vcov()
    to work with multivariate results. (PR#16380)

  • method = “libcurl” connections signal errors rather than
    retrieving HTTP error pages (where the ISP reports the error).

  • xpdrows.data.frame() was not checking for unique row names; in
    particular, this affected assignment to non-existing rows via
    numerical indexing. (PR#16570)

  • tail.matrix() did not work for zero rows matrices, and could
    produce row “labels” such as “[1e+05,]”.

  • Data frames with a column named “stringsAsFactors” now format and
    print correctly. (PR#16580)

  • cor() is now guaranteed to return a value with absolute value
    less than or equal to 1. (PR#16638)

  • Array subsetting now keeps names(dim(.)).

  • Blocking socket connection selection recovers more gracefully on
    signal interrupts.

  • The data.frame method of rbind() construction row.names works
    better in borderline integer cases, but may change the names
    assigned. (PR#16666)

  • (X11 only) getGraphicsEvent() miscoded buttons and missed mouse
    motion events. (PR#16700)

  • methods(round) now also lists round.POSIXt.

  • tar() now works with the default files = NULL. (PR#16716)

  • Jumps to outer contexts, for example in error recovery, now make
    intermediate jumps to contexts where on.exit() actions are
    established instead of trying to run all on.exit() actions before
    jumping to the final target. This unwinds the stack gradually,
    releases resources held on the stack, and significantly reduces
    the chance of a segfault when running out of C stack space. Error
    handlers established using withCallingHandlers() and
    options(“error”) specifications are ignored when handling a C
    stack overflow error as attempting one of these would trigger a
    cascade of C stack overflow errors. (These changes resolve
    PR#16753.)

  • The spacing could be wrong when printing a complex array.
    (Report and patch by Lukas Stadler.)

  • pretty(d, n, min.n, *) for date-time objects d works again in
    border cases with large min.n, returns a labels attribute also
    for small-range dates and in such cases its returned length is
    closer to the desired n. (PR#16761) Additionally, it finally
    does cover the range of d, as it always claimed.

  • tsp(x) both “ts” and “mts”. (PR#16769)

  • install.packages() could give false errors when
    options(“pkgType”) was “binary”. (Reported by Jose Claudio
    Faria.)

  • A bug fix in R 3.0.2 fixed problems with locator() in X11, but
    introduced problems in Windows. Now both should be fixed.
    (PR#15700)

  • download.file() with method = “wininet” incorrectly warned of
    download file length difference when reported length was unknown.
    (PR#16805)

  • diag(NULL, 1) crashed because of missed type checking.
    (PR#16853)

Publicado em Dicas R, R Notícias | Marcado com , , , | 3 Comentários