From 716c9d4271c84b78def14be14789a1811e2974b4 Mon Sep 17 00:00:00 2001 From: Ricardo Perdiz Date: Wed, 2 Apr 2025 12:21:50 -0400 Subject: [PATCH 1/2] atualiza livro e adiciona epub --- codigo/01-intro.R | 58 +++-- codigo/02-vetores.R | 16 +- codigo/03-matrizes_dframes.R | 396 +++++++++++++++-------------- codigo/04-listas_objComplexos.R | 2 +- codigo/05-funcoes_graficas.R | 4 +- codigo/07-sumarizacao_dados.R | 14 +- codigo/08-manip_txt_arqs_pasta.R | 78 +++--- codigo/09-amostragens_aleatorias.R | 2 +- codigo/11-aed_checadados.R | 16 +- codigo/12-aed_checaunivar.R | 50 ++-- codigo/13-aed_checabivar.R | 66 ++--- codigo/14-aed_checamultivar.R | 106 ++++---- codigo/15-tidyverse.R | 42 +-- pkg-bib.bib | 116 ++++----- 14 files changed, 493 insertions(+), 473 deletions(-) diff --git a/codigo/01-intro.R b/codigo/01-intro.R index e6a72aa..31bdc6b 100644 --- a/codigo/01-intro.R +++ b/codigo/01-intro.R @@ -23,7 +23,7 @@ knitr::include_graphics("figuras/r_padrao.png") #' #' Ao abrirem o R ou o RStudio você terão basicamente duas janelas principais: #' -#' * **Console** - corresponde`a interface que interpreta o código da linguagem. Os códigos digitados aqui serão interpretados pelo R (Texto destacado em **verde** nas figuras \@ref(fig:pad-r), \@ref(fig:studio-r)); +#' * **Console** - corresponde à interface que interpreta o código da linguagem. Os códigos digitados aqui serão interpretados pelo R (Texto destacado em **verde** nas figuras \@ref(fig:pad-r), \@ref(fig:studio-r)); #' #' * **Script** - digitar um código curto no console é simples, mas quando o código é longo, é importante guardá-lo em algum lugar para executá-lo em qualquer momento. Para isso utilizamos scripts, que são arquivos de textos simples que podem ser salvo (extensão `.R`) numa pasta no seu computador e reutilizado (Texto destacado em **amarelo** nas figuras \@ref(fig:pad-r), \@ref(fig:studio-r)). Como um arquivo `.R` é um texto simples, ele é editável por qualquer editor de texto, como o Bloco de Notas ou [Notepad++](https://notepad-plus-plus.org/) para usuários Windows, [TextWrangler](https://www.barebones.com/products/textwrangler/) ou [BBEdit](https://www.barebones.com/products/textwrangler/) para usuários macOS, ou [gedit](https://help.gnome.org/users/gedit/stable/index.html.pt_BR) para usuários Linux. O editor de scripts do RStudio é excelente. #' @@ -126,7 +126,7 @@ ls(sorted = FALSE) # ele mostra os objetos na ordem que foram criados #' Se você necessitar deste pacote, por exemplo, basta executar o seguinte comando no console do R: #' ## ----eval = FALSE, echo = TRUE------------------------------------------------ -## install.packages("ape") +# install.packages("ape") #' #' Para trabalhar com pacotes você primeiro precisa definir um repositório, ou seja, um servidor, de vários disponíveis (espelhos do repositório oficial), de onde o R buscará o pacote desejado. @@ -136,9 +136,9 @@ ls(sorted = FALSE) # ele mostra os objetos na ordem que foram criados #' Por exemplo, ao invés de usarmos o menu do R para definir um repositório e instalar um pacote, vamos executar estas ações por meio de um script: #' ## ----eval = FALSE, echo = TRUE------------------------------------------------ -## # isso pode não funcionar se estiver no INPA por causa do Proxy. -## chooseCRANmirror() # seleciona repositório -## install.packages("ape", dependencies = TRUE) # instala o pacote Ape +# # isso pode não funcionar se estiver no INPA por causa do Proxy. +# chooseCRANmirror() # seleciona repositório +# install.packages("ape", dependencies = TRUE) # instala o pacote Ape #' #' ## Ajuda no R {#help} @@ -191,14 +191,14 @@ getwd() # o nome desta função é abreviação de "get working directory" ou se #' Ou você pode usar uma função: #' ## ----eval = FALSE, echo = TRUE------------------------------------------------ -## ?setwd # veja o help da função que iremos utilizar -## minhapasta <- "/Users/BetoVicentini/Desktop/bot89-2016" -## # se estiver usando windows: -## # minhapasta = "c:/Users/BetoVicentini/Documents/bot89-2016" -## # minhapasta = "c:\\/Users\\/BetoVicentini\\/Documents\\/bot89-2016" #talvez precise usar barras invertidas -## -## setwd(dir = minhapasta) # usa a funçao "set working directory" para especificar o diretório (pasta) de trabalho -## # note que eu defini dir primeiramente como o objeto "minhapasta" usei esse objeto para especificar o objeto "dir", que é o único argumento da função setwd() +# ?setwd # veja o help da função que iremos utilizar +# minhapasta <- "/Users/BetoVicentini/Desktop/bot89-2016" +# # se estiver usando windows: +# # minhapasta = "c:/Users/BetoVicentini/Documents/bot89-2016" +# # minhapasta = "c:\\/Users\\/BetoVicentini\\/Documents\\/bot89-2016" #talvez precise usar barras invertidas +# +# setwd(dir = minhapasta) # usa a funçao "set working directory" para especificar o diretório (pasta) de trabalho +# # note que eu defini dir primeiramente como o objeto "minhapasta" usei esse objeto para especificar o objeto "dir", que é o único argumento da função setwd() #' #' Objetos criados no R por você podem ser salvos como um arquivo no seu computador. @@ -312,7 +312,7 @@ ls() # os objetos foram criados como especificado no script #' Você verá que o sinal de `>` voltará a aparecer no console. #' ## ----eval = FALSE------------------------------------------------------------- -## erro <- c(1, 2, 3 +# erro <- c(1, 2, 3 #' #' Agora, execute o comando abaixo. @@ -329,7 +329,9 @@ erro <- c(1, 2, 3) #' Tentem executar o código abaixo: #' ## ----error = TRUE------------------------------------------------------------- +try({ numeros <- c(1, 5, 6 7, 8) +}) #' #' O R dará o aviso `Error: unexpected numeric constant in "numeros <- c(1,5,6 7"` e encerrá a operação. @@ -370,7 +372,9 @@ obj2 <- "18" #' Isso não vai funcionar porque `obj2` não é um número. #' ## ----error = TRUE------------------------------------------------------------- +try({ obj2 + 1 +}) #' #' Caso você insista em rodar, receberá a seguinte mensagem: `Error in obj2 + 1 : non-numeric argument to binary operator`. @@ -380,7 +384,9 @@ obj2 + 1 #' Nomes de objetos não podem ter espaço em branco e aspas são ignoradas: #' ## ----error = TRUE------------------------------------------------------------- +try({ obj 1 = "meutexto" #nao vai funcionar +}) #' #' @@ -394,7 +400,9 @@ obj1 #' #' ## ----error = TRUE------------------------------------------------------------- +try({ obj"1" = "meu texto" #nao vai funcionar +}) #' #' @@ -436,7 +444,7 @@ str(iris) #veja a estrutura #' Agora, vamos obter um sumário estatístico de `iris`: #' ## ----eval=FALSE, echo=TRUE---------------------------------------------------- -## summary(iris) #veja o que é iris +# summary(iris) #veja o que é iris #' ## ----eval=TRUE, echo=FALSE---------------------------------------------------- @@ -600,16 +608,16 @@ o1 * o2^(o3 - 1) # =32 #' Veja o `?` para qualquer uma das funções abaixo e siga os links relacionados para ver todas as possibilidades dessas funções genéricas de uso genérico. #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## ?srqt -## ?abs -## ?log -## ?log10 -## ?sin -## ?cos -## ?asin -## ?ceiling -## ?floor -## ?round +# ?srqt +# ?abs +# ?log +# ?log10 +# ?sin +# ?cos +# ?asin +# ?ceiling +# ?floor +# ?round #' #' Veremos adiante que essas funções e operações matemáticas são aplicáveis à vetores. diff --git a/codigo/02-vetores.R b/codigo/02-vetores.R index 3046efd..5f78739 100644 --- a/codigo/02-vetores.R +++ b/codigo/02-vetores.R @@ -47,7 +47,7 @@ v3 == v4 #' Tente executar o comando abaixo para ver o que acontece quando utilizamos esses valores em letras minúsculas: #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## v5 <- c(true, true, false, false) +# v5 <- c(true, true, false, false) #' #' O R retorna a mensagem de erro `Error: object 'true' not found` pois ele procura pelo primeiro objeto de nosso vetor ` c(true, true, false, false)` na área de trabalho e, ao não encontrar, ele retorna esta mensagem de erro, justamente por não compreender `true` como um vetor lógico, e sim como um objeto! @@ -421,8 +421,8 @@ data2 <- "17/04/2016" #' #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # eu nao posso simplesmente subtrair esses valores -## data2 - data1 +# # eu nao posso simplesmente subtrair esses valores +# data2 - data1 #' #' O R retorna uma mensagem de erro (`Error in data2 - data1 : non-numeric argument to binary operator`) porque esses objetos são de classe texto, e operações matemáticas só são permitidas com números ou datas. @@ -436,9 +436,9 @@ class(data2) #' Porém, se convertermos esses objetos para a classe `Date`, então poderemos fazer operações matemáticas com eles: #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # mas o R tem um classe para datas -## # entao fazemos a conversao -## ?as.Date # veja o help dessa função +# # mas o R tem um classe para datas +# # entao fazemos a conversao +# ?as.Date # veja o help dessa função #' #' @@ -738,8 +738,8 @@ v2 #' #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # isso também pode ser feito com na.omit() -## ?na.omit # veja o help dessa função +# # isso também pode ser feito com na.omit() +# ?na.omit # veja o help dessa função #' #' diff --git a/codigo/03-matrizes_dframes.R b/codigo/03-matrizes_dframes.R index eced929..0531155 100644 --- a/codigo/03-matrizes_dframes.R +++ b/codigo/03-matrizes_dframes.R @@ -21,17 +21,17 @@ #' Para criar matrizes, a função básica se chama `matrix()`: #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # veja o help da função -## ?matrix -## -## # a função se usa assim: matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) -## # onde: -## # data = NA #um vetor de comprimento igual ao número de células desejadas que é nrow*ncol. -## # byrow = FALSE #A forma de preenchimento da planilha pelos dados em data. Se byrow=TRUE, então ele preenche pelas linhas, senão pelas -## # colunas -## # nrow = número de linhas -## # ncol = número de colunas -## # dimnames = um objeto do tipo lista (que ainda não vimos), com dois vetores, um com os nomes das linhas, outro com os nomes das colunas. +# # veja o help da função +# ?matrix +# +# # a função se usa assim: matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) +# # onde: +# # data = NA #um vetor de comprimento igual ao número de células desejadas que é nrow*ncol. +# # byrow = FALSE #A forma de preenchimento da planilha pelos dados em data. Se byrow=TRUE, então ele preenche pelas linhas, senão pelas +# # colunas +# # nrow = número de linhas +# # ncol = número de colunas +# # dimnames = um objeto do tipo lista (que ainda não vimos), com dois vetores, um com os nomes das linhas, outro com os nomes das colunas. #' #' @@ -110,17 +110,17 @@ mmc #' Para criar ou converter dados em data.frames, podemos usar as funções `data.frame()` e `as.data.frame()`. #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## ?data.frame # veja o help das funções acima +# ?data.frame # veja o help das funções acima #' #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # a funcao que cria o objeto é -## data.frame(..., row.names = NULL, check.rows = FALSE, check.names = TRUE, stringsAsFactors = default.stringsAsFactors()) -## -## # de todos os argumentos os mais importantes são: -## # ... #que pode ser vetores ou tag = vetor (os dados da tabela) -## # stringsAsFactors #que especifica se queremos os textos como vetores ou fatores +# # a funcao que cria o objeto é +# data.frame(..., row.names = NULL, check.rows = FALSE, check.names = TRUE, stringsAsFactors = default.stringsAsFactors()) +# +# # de todos os argumentos os mais importantes são: +# # ... #que pode ser vetores ou tag = vetor (os dados da tabela) +# # stringsAsFactors #que especifica se queremos os textos como vetores ou fatores #' #' @@ -170,8 +170,8 @@ str(dz) # converte numeros para numerico e texto para character #' Vejam o `?` dessas duas funções: #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## ?head -## ?tail +# ?head +# ?tail #' #' @@ -212,7 +212,7 @@ str(dd2) # mostra a estrutura do objeto, quais colunas, classes de colunas e tot #' #' ## ----eval=FALSE, echo=TRUE---------------------------------------------------- -## summary(dd2) # mostra para cada coluna a variação encontrada: estatística descritiva de variáveis numéricas, contagem por categoria de fatores, etc. Veremos isso adiante. +# summary(dd2) # mostra para cada coluna a variação encontrada: estatística descritiva de variáveis numéricas, contagem por categoria de fatores, etc. Veremos isso adiante. #' ## ----eval=TRUE, echo=FALSE---------------------------------------------------- @@ -297,7 +297,7 @@ rownames(mm2)[1:2] <- "teste1" # coloque o nome teste1 para as linhas 1 e 2 FUNC #' Reparem que um mesmo nome de linha pode ser utilizado em mais de uma linha de uma matriz. Será que isso pode ser feito em um `data.frame`? Vejamos: #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## rownames(dd)[1:2] <- "teste1" # nao funciona, porque ele não aceita nomes repetidos de linhas em DATA.FRAMES +# rownames(dd)[1:2] <- "teste1" # nao funciona, porque ele não aceita nomes repetidos de linhas em DATA.FRAMES #' #' @@ -369,7 +369,7 @@ dd$coluna1 # pego a coluna 1 (note que o nome da coluna vai sem "aspas") #' Veja que o uso do operador `$` não funciona em matrizes: #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## mm$coluna1 # veja como não funciona para o objeto matrix +# mm$coluna1 # veja como não funciona para o objeto matrix #' #' @@ -389,8 +389,8 @@ dd # agora tenho uma nova coluna #' #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # ou poderia usar outra forma -## dd[, "nova2"] <- LETTERS # nao vai funcionar por estou atribuindo um vetor muito mais longo do que tenho linhas +# # ou poderia usar outra forma +# dd[, "nova2"] <- LETTERS # nao vai funcionar por estou atribuindo um vetor muito mais longo do que tenho linhas #' #' @@ -411,9 +411,9 @@ dd #' Adicionar colunas em uma matriz é um pouco diferente do que se faz com um `data.frame`: #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # primeiro nao posso usar $ porque matrix não entende isso -## class(mm) # é uma matrix -## mm$colun3 # isso nao funciona +# # primeiro nao posso usar $ porque matrix não entende isso +# class(mm) # é uma matrix +# mm$colun3 # isso nao funciona #' #' @@ -424,8 +424,8 @@ mm[, "coluna3"] # isso funciona #' #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## mm[, 4] # isso nao existe -## mm[, 4] <- log(mm[, "coluna3"]) # isso não funciona +# mm[, 4] # isso nao existe +# mm[, 4] <- log(mm[, "coluna3"]) # isso não funciona #' #' @@ -444,7 +444,7 @@ mm <- cbind(mm, LOGCOLUNA3 = log(mm[, "coluna3"])) # assim eu posso #' Aqui vamos estender isso para objetos de classe `matrix` e `data.frame`, porque é através de vetores lógicos ou de matrizes lógicas que podemos filtrar dados de objetos bidimensionais. #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## ?iris # veja o help do R sobre Edgar Anderson's Iris Data que explica esses dados que vem com o R +# ?iris # veja o help do R sobre Edgar Anderson's Iris Data que explica esses dados que vem com o R #' #' @@ -524,8 +524,8 @@ sum(is.na(dd2)) # nao tem mais nenhum #' * `order()` ordena um vetor e retorna os **índices dos valores ordenados**. É isso que deve ser utilizado para ordenar matrizes e `data.frames`. #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## ?sort -## ?order +# ?sort +# ?order #' #' @@ -533,6 +533,9 @@ sum(is.na(dd2)) # nao tem mais nenhum # ordenação str(iris) +#' +#' +## ----------------------------------------------------------------------------- # funcao SORT() o1 <- sort(iris$Sepal.Length) # pega os valores ordenados da coluna comprimento de sépala o1 # sao valores de sepalas do menor para o maior @@ -540,6 +543,9 @@ o1 # sao valores de sepalas do menor para o maior o2 <- sort(iris$Sepal.Length, decreasing = T) o2 # sao valores de sepalas do maior para o menor +#' +#' +## ----------------------------------------------------------------------------- # FUNCAO order() # qual o indice dos valores ordenados em ordem crescente? o3 <- order(iris$Sepal.Length) @@ -551,18 +557,30 @@ iris$Sepal.Length[o3] == sort(iris$Sepal.Length) # as comparações para a par s # então esta expressão também é verdadeira: sum(iris$Sepal.Length[o3] == sort(iris$Sepal.Length)) == nrow(iris) +#' +#' +## ----------------------------------------------------------------------------- # portanto a função sort ordena os valores e funcao order mostra apenas os indices dos valores ordenados. Assim, posso usar a funcao order() para ordenar data.frames, matrizes e vetores idx <- order(iris$Sepal.Length) # indice das linhas ordenadas segundo o comprimento das sepalas # compara com o original: sum(iris$Sepal.Length[idx] == iris$Sepal.Length) == nrow(iris) # é FALSO porque em iris as linhas não estão originalmente ordenadas segundo o comprimento. +#' +#' +## ----------------------------------------------------------------------------- # vamos mudar isso novo.iris <- iris[idx, ] # pego o vetor de indices dos valores ordenados e uso na indexacao para ordenar o objeto original segunda a coluna escolhida idx2 <- order(novo.iris$Sepal.Length) # indice das linhas ordenadas segundo o comprimento das sepalas -# note que agora essa expressão é verdadeira, porque o original já está ordenado segundo essa coluna -sum(novo.iris$Sepal.Length[idx2] == novo.iris$Sepal.Length) == nrow(novo.iris) # é FALSO +#' +#' +## ----------------------------------------------------------------------------- +# note que agora essa expressão é verdadeira, porque o original já está ordenado segundo essa coluna +sum(novo.iris$Sepal.Length[idx2] == novo.iris$Sepal.Length) == nrow(novo.iris) # é VERDADEIRO +#' +#' +## ----------------------------------------------------------------------------- # AGORA ORDENANDO POR MULTIPLAS COLUNAS idx <- order(iris$Species, iris$Sepal.Length, decreasing = TRUE) # por especie e por sepala em ordem decrescente @@ -627,7 +645,7 @@ novo.iris[novo.iris$Species == "virginica", ]$Sepal.Length #' #' * Padronize como você dá nome às colunas; nome de colunas e de linhas não devem ser muito longos, e deve-se **evitar acentos ou espaços em branco em nomes de colunas**. Isso é muito importante! #' -#' * Se você usa planilhas, recomendamos usar uma versão de software livre da família LibreOffice/OpenOffice pois eles permitem um maior controle da exportação dos dados, o que inclui controlar o tipo de codificação de caracter dos dados de saída e também separadores das colunas, anto para ler como para salvar arquivos de planilhas. +#' * Se você usa planilhas, recomendamos usar uma versão de software livre da família LibreOffice/OpenOffice pois eles permitem um maior controle da exportação dos dados, o que inclui controlar o tipo de codificação de caracter dos dados de saída e também separadores das colunas, tanto para ler como para salvar arquivos de planilhas. #' #' ### Importando dados {#import-dados} #' @@ -659,99 +677,99 @@ novo.iris[novo.iris$Species == "virginica", ]$Sepal.Length #' * Salve novamente como `*.csv` - veja como você tem controle na exportação quanto aos elementos acima. #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # se você colocou o arquivo na sua pasta de trabalho, ele deve estar visível por -## dir(pattern = "csv") +# # se você colocou o arquivo na sua pasta de trabalho, ele deve estar visível por +# dir(pattern = "csv") #' #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # então posso ler sem precisar especificar o caminho até o arquivo -## # veja o help da função antes de começar -## ?read.table -## # os seguintes argumentos são mais importantes: -## # sep = " " #o codigo que separa as colunas, o padrão é espaço -## # quote = "\"'" #o que define células de texto - o padrão é interpretar tanto aspa simples como dupla presentes -## # dec = "." #ponto é a casa decimal padrão -## # header = FALSE #a primeira linha não tem o nome de colunas -## # as.is = FALSE #o padrão é converter texto em fatores, se usar T não fará isso -## # na.strings #se definir, pode informar aqui que símbolos em células inteiras que sejam interpretados como valores ausentes (NA) -## # encoding #codificação da acentuação. o padrão é 'unknown' (desconhecido), na qual ele reconhece segundo o sistema operacional. As opções mais usadas são 'latin1' ou 'utf8' e alterne com isso se você tem problemas com acentos. +# # então posso ler sem precisar especificar o caminho até o arquivo +# # veja o help da função antes de começar +# ?read.table +# # os seguintes argumentos são mais importantes: +# # sep = " " #o codigo que separa as colunas, o padrão é espaço +# # quote = "\"'" #o que define células de texto - o padrão é interpretar tanto aspa simples como dupla presentes +# # dec = "." #ponto é a casa decimal padrão +# # header = FALSE #a primeira linha não tem o nome de colunas +# # as.is = FALSE #o padrão é converter texto em fatores, se usar T não fará isso +# # na.strings #se definir, pode informar aqui que símbolos em células inteiras que sejam interpretados como valores ausentes (NA) +# # encoding #codificação da acentuação. o padrão é 'unknown' (desconhecido), na qual ele reconhece segundo o sistema operacional. As opções mais usadas são 'latin1' ou 'utf8' e alterne com isso se você tem problemas com acentos. #' #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # o arquivo original tem os seguintes formatos: -## # colunas separadas por tabulação (no R isso é definido pela expressão regular "\t") -## # decimal com ponto -## # não tem aspas definindo as colunas de texto. -## # a primeira linha é o nome das colunas. -## # Então, para ler posso usar: -## dd <- read.table(file = "municipiosbrasil.csv", sep = "\t", header = T) -## class(dd) # data.frame -## dim(dd) # dimensão do objeto -## head(dd) # cabeçalho do data.frame -## -## # veja o que aconteceria se eu achasse que no meu arquivo as colunas são separadas por vírgula -## dd2 <- read.table(file = "municipiosbrasil.csv", sep = ",", header = T) -## head(dd2) -## dim(dd2) # apenas 1 coluna, porque o separador informado não é o mesmo dos dados -## -## # e se o encoding do meu arquivo estiver errado? -## dd3 <- read.table(file = "municipiosbrasil.csv", sep = "\t", header = T, encoding = "latin1") -## dd3[5562, ] # veja o que aconteceu com os acentos nessa linha -## dd[5562, ] # no original o encoding não é "latin1" -## -## # veja a estrutura do objeto correto -## str(dd) -## # Poxa, todas as colunas são fatores, mesmo as colunas Latitude e Longitude que são numéricas. -## # Deve ter algum valor nessas colunas que não são numéricos. -## # Quais são? -## vl <- is.na(as.numeric(as.vector(dd$Latitude))) # quais são NA quando eu converto para numérico? Pois esses devem ser valores de texto e não numéricos. Note que converti o fator para vetor antes de converter para numérico. A função is.na pergunta o que é NA, pois os textos que não podem ser convertidos para número serão valores ausentes (NA) -## sum(vl) -## dd[vl, ] # essas linhas tem a palavra "NULL" para Latitude e Longitude no arquivo original (volte lá para confirmar), e o R não reconheceu isso como ausente NA. Como vetores devem ser da mesma classe, os números dessas colunas foram codificados como texto e as colunas convertidas a fatores de texto que é o padrão da função read.table() +# # o arquivo original tem os seguintes formatos: +# # colunas separadas por tabulação (no R isso é definido pela expressão regular "\t") +# # decimal com ponto +# # não tem aspas definindo as colunas de texto. +# # a primeira linha é o nome das colunas. +# # Então, para ler posso usar: +# dd <- read.table(file = "municipiosbrasil.csv", sep = "\t", header = T) +# class(dd) # data.frame +# dim(dd) # dimensão do objeto +# head(dd) # cabeçalho do data.frame +# +# # veja o que aconteceria se eu achasse que no meu arquivo as colunas são separadas por vírgula +# dd2 <- read.table(file = "municipiosbrasil.csv", sep = ",", header = T) +# head(dd2) +# dim(dd2) # apenas 1 coluna, porque o separador informado não é o mesmo dos dados +# +# # e se o encoding do meu arquivo estiver errado? +# dd3 <- read.table(file = "municipiosbrasil.csv", sep = "\t", header = T, encoding = "latin1") +# dd3[5562, ] # veja o que aconteceu com os acentos nessa linha +# dd[5562, ] # no original o encoding não é "latin1" +# +# # veja a estrutura do objeto correto +# str(dd) +# # Poxa, todas as colunas são fatores, mesmo as colunas Latitude e Longitude que são numéricas. +# # Deve ter algum valor nessas colunas que não são numéricos. +# # Quais são? +# vl <- is.na(as.numeric(as.vector(dd$Latitude))) # quais são NA quando eu converto para numérico? Pois esses devem ser valores de texto e não numéricos. Note que converti o fator para vetor antes de converter para numérico. A função is.na pergunta o que é NA, pois os textos que não podem ser convertidos para número serão valores ausentes (NA) +# sum(vl) +# dd[vl, ] # essas linhas tem a palavra "NULL" para Latitude e Longitude no arquivo original (volte lá para confirmar), e o R não reconheceu isso como ausente NA. Como vetores devem ser da mesma classe, os números dessas colunas foram codificados como texto e as colunas convertidas a fatores de texto que é o padrão da função read.table() #' #' Podemos usar o argumento `na.strings` para corrigir isso durante a importação: #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## dd4 <- read.table(file = "municipiosbrasil.csv", sep = "\t", header = T, dec = ".", na.strings = c("NULL", "NA", "")) -## # qualquer CELULA INTEIRA que contenha NULL ou NA ou esteja vazia SERÁ INTERPRETADA COMO VALOR AUSENTE e codificada como NA no R. -## str(dd4) -## # note que agora as colunas Latitude e Longitude foram interpretadas como número -## -## # mas o que acontece se informamos mal a casa decimal? -## dd5 <- read.table(file = "municipiosbrasil.csv", sep = "\t", header = T, dec = ",", na.strings = c("NULL", "NA", "")) -## str(dd5) -## # como tem ponto como definição de casa decimal no arquivo de dados, as colunas numéricas foram novamente interpretadas como texto. -## -## # Texto como vetores ou fatores? -## dd4 <- read.table(file = "municipiosbrasil.csv", sep = "\t", header = T, dec = ".", na.strings = c("NULL", "NA", "")) -## str(dd4) # todas as colunas de texto neste objeto foram interpretadas como fatores -## # o argumento as.is permite corrigir isso. "as is" significa "como está" nos dados originais, então valores de texto são lidos como vetores de caracteres não codificados em fatores. -## dd6 <- read.table( -## file = "municipiosbrasil.csv", -## sep = "\t", -## header = T, -## dec = ".", -## na.strings = c("NULL", "NA", ""), -## as.is = TRUE -## ) -## str(dd6) # diferentemente do objeto anterior, não há mais fatores +# dd4 <- read.table(file = "municipiosbrasil.csv", sep = "\t", header = T, dec = ".", na.strings = c("NULL", "NA", "")) +# # qualquer CELULA INTEIRA que contenha NULL ou NA ou esteja vazia SERÁ INTERPRETADA COMO VALOR AUSENTE e codificada como NA no R. +# str(dd4) +# # note que agora as colunas Latitude e Longitude foram interpretadas como número +# +# # mas o que acontece se informamos mal a casa decimal? +# dd5 <- read.table(file = "municipiosbrasil.csv", sep = "\t", header = T, dec = ",", na.strings = c("NULL", "NA", "")) +# str(dd5) +# # como tem ponto como definição de casa decimal no arquivo de dados, as colunas numéricas foram novamente interpretadas como texto. +# +# # Texto como vetores ou fatores? +# dd4 <- read.table(file = "municipiosbrasil.csv", sep = "\t", header = T, dec = ".", na.strings = c("NULL", "NA", "")) +# str(dd4) # todas as colunas de texto neste objeto foram interpretadas como fatores +# # o argumento as.is permite corrigir isso. "as is" significa "como está" nos dados originais, então valores de texto são lidos como vetores de caracteres não codificados em fatores. +# dd6 <- read.table( +# file = "municipiosbrasil.csv", +# sep = "\t", +# header = T, +# dec = ".", +# na.strings = c("NULL", "NA", ""), +# as.is = TRUE +# ) +# str(dd6) # diferentemente do objeto anterior, não há mais fatores #' #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # Lembram que colocamos o endereco do arquivo mais acima? -## # podemos usar um endereco da internet para baixar um arquivo -## dd7 <- -## read.table( -## "https://github.com/LABOTAM/IntroR/blob/main/dados/municipiosbrasil.csv", -## sep = "\t", -## header = TRUE -## ) -## dd7 -## head(dd7) -## # a função read.table tem vários outros argumentos. Veja o help e entenda isso bem. +# # Lembram que colocamos o endereco do arquivo mais acima? +# # podemos usar um endereco da internet para baixar um arquivo +# dd7 <- +# read.table( +# "https://github.com/LABOTAM/IntroR/blob/main/dados/municipiosbrasil.csv", +# sep = "\t", +# header = TRUE +# ) +# dd7 +# head(dd7) +# # a função read.table tem vários outros argumentos. Veja o help e entenda isso bem. #' #' #### Pacote readr @@ -762,21 +780,21 @@ novo.iris[novo.iris$Species == "virginica", ]$Sepal.Length #' Os argumentos possuem nomes diferentes do que os utilizados em `read.table()` e, como este, importa arquivos em formato de texto simples (*.csv* , *.txt*). #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # pacote readr -## # usando como exemplo o mesmo arquivo municipiosbrasil.csv -## library("readr") -## rr1 <- read_delim("municipiosbrasil.csv", delim = "\t") -## rr1 -## dd7 -## dim(rr1) -## dim(dd7) +# # pacote readr +# # usando como exemplo o mesmo arquivo municipiosbrasil.csv +# library("readr") +# rr1 <- read_delim("municipiosbrasil.csv", delim = "\t") +# rr1 +# dd7 +# dim(rr1) +# dim(dd7) #' #' Como no pacote `base`, também podemos ler arquivos diretamente da rede: #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## rr2 <- read_delim("https://github.com/LABOTAM/IntroR/blob/main/dados/municipiosbrasil.csv", delim = "\t") -## rr2 +# rr2 <- read_delim("https://github.com/LABOTAM/IntroR/blob/main/dados/municipiosbrasil.csv", delim = "\t") +# rr2 #' #' #### Pacote data.table @@ -791,18 +809,18 @@ novo.iris[novo.iris$Species == "virginica", ]$Sepal.Length #' Como os pacotes citados acima, esta função é capaz de importar arquivos em formato de texto simples (`.csv` , `.txt`). #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # pacote data.table -## # usando como exemplo o mesmo arquivo municipiosbrasil.csv -## library("data.table") -## dt1 <- fread("municipiosbrasil.csv") -## dt1 +# # pacote data.table +# # usando como exemplo o mesmo arquivo municipiosbrasil.csv +# library("data.table") +# dt1 <- fread("municipiosbrasil.csv") +# dt1 #' #' Também podemos ler arquivos diretamente da rede, providenciando um endereço que contenha um arquivo de texto simples: #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## dt2 <- fread("https://github.com/LABOTAM/IntroR/blob/main/dados/municipiosbrasil.csv") -## dt2 +# dt2 <- fread("https://github.com/LABOTAM/IntroR/blob/main/dados/municipiosbrasil.csv") +# dt2 #' #' #### Importando do Excel diretamente @@ -813,23 +831,23 @@ novo.iris[novo.iris$Species == "virginica", ]$Sepal.Length #' Veja o `?` das funções usadas para conhecer parâmetros opcionais para resolver esses possíveis problemas. #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # instale o pacote -## library("readxl") -## -## # se o arquivo for xls -## # Salve o arquivo municipiosbrasil.csv como xlsx ou xls -## meuxlsx <- "municipiosbrasil.xlsx" -## dd <- read_excel(path = meuxlsx, sheet = 1) -## dd -## dd <- as.data.frame(dd) -## dd -## -## # se o arquivo for xls -## meuxls <- "municipiosbrasil.xls" -## dd <- read_excel(path = meuxls, sheet = 1) -## dd -## dd <- as.data.frame(dd) -## dd +# # instale o pacote +# library("readxl") +# +# # se o arquivo for xls +# # Salve o arquivo municipiosbrasil.csv como xlsx ou xls +# meuxlsx <- "municipiosbrasil.xlsx" +# dd <- read_excel(path = meuxlsx, sheet = 1) +# dd +# dd <- as.data.frame(dd) +# dd +# +# # se o arquivo for xls +# meuxls <- "municipiosbrasil.xls" +# dd <- read_excel(path = meuxls, sheet = 1) +# dd +# dd <- as.data.frame(dd) +# dd #' #' ### Exportando dados @@ -840,44 +858,44 @@ novo.iris[novo.iris$Species == "virginica", ]$Sepal.Length #' Ela funciona para exportar arquivos em formato de texto simples (`.csv`, `.txt`) e usa basicamente os mesmos argumentos da função `read.table()`. #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## ?write.table # veja o help - recomendo usar essa função genérica e evitar de usar atalhos tipo write.csv, que no fundo usam esta mesma função +# ?write.table # veja o help - recomendo usar essa função genérica e evitar de usar atalhos tipo write.csv, que no fundo usam esta mesma função #' #' #' Por se tratar de uma função do pacote `base`, não é necessário recorrer a função `library()` para chamar nenhum pacote, pois a função encontra-se disponível a qualquer momento para ser utilizada no R: #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # vamos usar o mesmo arquivo -## dir(pattern = "csv") -## # ler o arquivo para o R para ter algo a exportar -## dd <- read.table(file = "municipiosbrasil.csv", sep = "\t", header = T, dec = ".", na.strings = c("NULL", "NA", ""), as.is = TRUE) -## str(dd) # diferentemente do objeto anterior, não há mais fatores -## -## # filtrando apenas para municipios do Amazonas: -## vl <- dd$Province %in% "Amazonas" -## sum(vl) # quantos são? -## # ou, desse jeito que é identico: -## vl <- dd$Province == "Amazonas" -## sum(vl) -## dd.am <- dd[vl, ] -## nrow(dd.am) == sum(vl) # deve ser verdadeiro, certo? -## -## # salvando esses dados num novo arquivo com diferentes formatações: -## # separado por tabulação e textos sem aspas e células NA sem nada -## write.table(dd.am, file = "muni-am1.csv", sep = "\t", na = "", quote = FALSE) -## # separado por tabulação e textos com aspas e células NA sem nada -## write.table(dd.am, file = "muni-am2.csv", sep = "\t", na = "", quote = TRUE) -## -## # separado por vírgula e textos com aspas e células NA com a palavra valor.ausente -## write.table(dd.am, file = "muni-am3.csv", sep = ",", na = "valor.ausente", quote = TRUE) -## -## # separado por vírgula e textos com aspas e células NA vazios e não adicona nomes das linhas como primeira coluna (row.names=FALSE). Pode deslocar a primeira linha na sua planilha SE você NAO USAR este argumento) -## write.table(dd.am, file = "muni-am4.csv", sep = ",", na = "", quote = TRUE, row.names = FALSE) -## -## # separado por tabulação e textos sem aspas e células NA vazias, sem nomes das linhas, e quebra de linha no formato do windows (eol = "\r\n") -## write.table(dd.am, file = "muni-am5.csv", sep = ",", na = "", quote = TRUE, row.names = FALSE, eol = "\r\n") -## -## # ABRA OS ARQUIVOS GERADOS NO SEU EDITOR DE TEXTO E COMPARE AS FORMATAÇÕES GERADAS +# # vamos usar o mesmo arquivo +# dir(pattern = "csv") +# # ler o arquivo para o R para ter algo a exportar +# dd <- read.table(file = "municipiosbrasil.csv", sep = "\t", header = T, dec = ".", na.strings = c("NULL", "NA", ""), as.is = TRUE) +# str(dd) # diferentemente do objeto anterior, não há mais fatores +# +# # filtrando apenas para municipios do Amazonas: +# vl <- dd$Province %in% "Amazonas" +# sum(vl) # quantos são? +# # ou, desse jeito que é identico: +# vl <- dd$Province == "Amazonas" +# sum(vl) +# dd.am <- dd[vl, ] +# nrow(dd.am) == sum(vl) # deve ser verdadeiro, certo? +# +# # salvando esses dados num novo arquivo com diferentes formatações: +# # separado por tabulação e textos sem aspas e células NA sem nada +# write.table(dd.am, file = "muni-am1.csv", sep = "\t", na = "", quote = FALSE) +# # separado por tabulação e textos com aspas e células NA sem nada +# write.table(dd.am, file = "muni-am2.csv", sep = "\t", na = "", quote = TRUE) +# +# # separado por vírgula e textos com aspas e células NA com a palavra valor.ausente +# write.table(dd.am, file = "muni-am3.csv", sep = ",", na = "valor.ausente", quote = TRUE) +# +# # separado por vírgula e textos com aspas e células NA vazios e não adicona nomes das linhas como primeira coluna (row.names=FALSE). Pode deslocar a primeira linha na sua planilha SE você NAO USAR este argumento) +# write.table(dd.am, file = "muni-am4.csv", sep = ",", na = "", quote = TRUE, row.names = FALSE) +# +# # separado por tabulação e textos sem aspas e células NA vazias, sem nomes das linhas, e quebra de linha no formato do windows (eol = "\r\n") +# write.table(dd.am, file = "muni-am5.csv", sep = ",", na = "", quote = TRUE, row.names = FALSE, eol = "\r\n") +# +# # ABRA OS ARQUIVOS GERADOS NO SEU EDITOR DE TEXTO E COMPARE AS FORMATAÇÕES GERADAS #' #' #### Pacote `readr` @@ -886,10 +904,10 @@ novo.iris[novo.iris$Species == "virginica", ]$Sepal.Length #' Ela exporta `data.frames` em formato de texto simples (`.csv`, `.txt`), utilizando basicamente os mesmos argumentos da função `read_delim()`, pertencente ao mesmo pacote. #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # exportando dados com pacote readr -## # utilizando mesmo objeto criado com pacote base -## write_delim(dd.am, "muni-am6.csv", delim = "\t") -## write_delim(dd.am, "muni-am7.csv", delim = ";") +# # exportando dados com pacote readr +# # utilizando mesmo objeto criado com pacote base +# write_delim(dd.am, "muni-am6.csv", delim = "\t") +# write_delim(dd.am, "muni-am7.csv", delim = ";") #' #' #### Pacote `data.table` @@ -897,9 +915,9 @@ novo.iris[novo.iris$Species == "virginica", ]$Sepal.Length #' A principal função do pacote `data.table` para exportar `data.frames` em formato de texto simples (`.csv`, `.txt`) se chama `fwrite()` e usa basicamente os mesmos argumentos da função `read_delim()`, pertencente ao pacote `readr`. #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # exportando dados com pacote data.table -## # utilizando mesmo objeto criado com pacote base -## fwrite(dd.am, "muni-am8.csv", sep = "\t") +# # exportando dados com pacote data.table +# # utilizando mesmo objeto criado com pacote base +# fwrite(dd.am, "muni-am8.csv", sep = "\t") #' #' ### Outras funções úteis @@ -909,8 +927,8 @@ novo.iris[novo.iris$Species == "virginica", ]$Sepal.Length #' Vamos usar o mesmo arquivo `municipiosbrasil.csv` para demonstrar sua utilidade: #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # esta função é muito util para ler linha por linha um arquivo de texto que você quer explorar. -## dd <- scan(file = "municipiosbrasil.csv", what = "complex", sep = "\n") +# # esta função é muito util para ler linha por linha um arquivo de texto que você quer explorar. +# dd <- scan(file = "municipiosbrasil.csv", what = "complex", sep = "\n") #' ## ----include = FALSE, message = FALSE----------------------------------------- @@ -927,8 +945,8 @@ dd[1] #' #' ## ----echo = TRUE, eval = FALSE------------------------------------------------ -## # usando tabulação -## dd2 <- scan(file = "municipiosbrasil.csv", what = "complex", sep = "\t") +# # usando tabulação +# dd2 <- scan(file = "municipiosbrasil.csv", what = "complex", sep = "\t") #' #' diff --git a/codigo/04-listas_objComplexos.R b/codigo/04-listas_objComplexos.R index d7cba92..d2510ac 100644 --- a/codigo/04-listas_objComplexos.R +++ b/codigo/04-listas_objComplexos.R @@ -9,7 +9,7 @@ #' A indexação de listas é dado pelo operador `[[indice_ou_nome]]` ou `lista$` seguida do nome (se os elementos da lista tem nome; e.g. `lista$nomeDeUmElementoDaLista`). #' ## ----eval = FALSE, echo = TRUE------------------------------------------------ -## ?list # veja o help +# ?list # veja o help #' #' diff --git a/codigo/05-funcoes_graficas.R b/codigo/05-funcoes_graficas.R index 218633f..634bd92 100644 --- a/codigo/05-funcoes_graficas.R +++ b/codigo/05-funcoes_graficas.R @@ -1452,8 +1452,8 @@ trees[ss, ] #' O conjunto de dados [alunos2018.txt](http://www.lage.ib.usp.br/notar/files/alunos2018.txt) será utilizado na maioria dos exercícios listados abaixo: #' #' * Resolva o exercício [302.02 Histogramas (frequência)](http://notar.ib.usp.br/exercicio/66). -#' * Resolva o exercício [302.07 Gráficos com trechos selecionados do data.frame/matriz](http://notar.ib.usp.br/exercicio/71). #' * Resolva o exercício [302.04 Box-plots](http://notar.ib.usp.br/exercicio/67). #' * Resolva o exercício [302.05 Gráficos de dispersão](http://notar.ib.usp.br/exercicio/69). #' * Resolva o exercício [302.06 Matriz de dispersão](http://notar.ib.usp.br/exercicio/70). -#' * Resolva o exercício [Editando parâmetros gráficos](http://notar.ib.usp.br/exercicio/75). +#' * Resolva o exercício [302.07 Gráficos com trechos selecionados do data.frame/matriz](http://notar.ib.usp.br/exercicio/71). +#' * Resolva o exercício [105.01 Editando alguns parâmetros gráficos](http://notar.ib.usp.br/exercicio/78). diff --git a/codigo/07-sumarizacao_dados.R b/codigo/07-sumarizacao_dados.R index 522a781..1b9bf8a 100644 --- a/codigo/07-sumarizacao_dados.R +++ b/codigo/07-sumarizacao_dados.R @@ -54,7 +54,7 @@ class(ob1) # obtenho um data frame #' #' ## ----eval=FALSE, echo=TRUE---------------------------------------------------- -## head(ob1) +# head(ob1) #' ## ----eval=TRUE, echo=FALSE---------------------------------------------------- @@ -72,7 +72,7 @@ caixeta.alt <- aggregate(caixeta$h, by = list(local = caixeta$local, especie = c #' ## ----eval=FALSE, echo=TRUE---------------------------------------------------- -## head(caixeta.alt) +# head(caixeta.alt) #' ## ----eval=TRUE, echo=FALSE---------------------------------------------------- @@ -108,8 +108,8 @@ names(caixeta) #' #' ## ----eval=FALSE, echo=TRUE---------------------------------------------------- -## # podemos resumir quantos individuos tem de cada espécie (considerando que cada linha é um individuo) -## table(caixeta$especie) +# # podemos resumir quantos individuos tem de cada espécie (considerando que cada linha é um individuo) +# table(caixeta$especie) #' #' @@ -131,7 +131,7 @@ tb <- table(caixeta$especie, caixeta$local) #' #' ## ----eval=FALSE, echo=TRUE---------------------------------------------------- -## head(tb, 3) # mostra as tres primeiras linhas +# head(tb, 3) # mostra as tres primeiras linhas #' ## ----eval=TRUE, echo=FALSE---------------------------------------------------- @@ -150,7 +150,7 @@ tb[tb > 0] <- 1 #' #' ## ----eval=FALSE, echo=TRUE---------------------------------------------------- -## head(tb) +# head(tb) #' ## ----eval=TRUE, echo=FALSE---------------------------------------------------- @@ -193,7 +193,7 @@ spp #' Você pode executar o comando, preencher o formulário e aguardar por sua chave: #' ## ----eval = FALSE------------------------------------------------------------- -## use_tropicos() +# use_tropicos() #' #' Para este exemplo, guardamos nossa chave API em um objeto chamado `tropicos_key` que, por motivos óbvios, não mostraremos aqui o que ele guarda: diff --git a/codigo/08-manip_txt_arqs_pasta.R b/codigo/08-manip_txt_arqs_pasta.R index 508a5b6..8112a03 100644 --- a/codigo/08-manip_txt_arqs_pasta.R +++ b/codigo/08-manip_txt_arqs_pasta.R @@ -7,7 +7,7 @@ #' A função `paste()` concatena textos. #' ## ----eval = FALSE, echo = TRUE------------------------------------------------ -## ?paste # veja o help dessa funcao +# ?paste # veja o help dessa funcao #' #' Vamos criar dois vetores de texto, `txt` e `txt2`, para, em seguida, concatená-los com esta função: @@ -45,7 +45,7 @@ paste(txt, collapse = " mais ") #' A função `strsplit()` quebra um vetor de texto segundo um separador determinado pelo argumento `split`, e retorna uma lista como resultado. #' ## ----eval = FALSE, echo = TRUE------------------------------------------------ -## ?strsplit +# ?strsplit #' #' @@ -435,8 +435,8 @@ grep("[a-z]", vt, value = TRUE)[1:30] #' Isso é fundamental se você quer incluir/buscar num texto por aspas, parênteses, colchetes, barras, metacaracteres, etc. #' ## ----eval = FALSE, echo = TRUE------------------------------------------------ -## ?Quotes # leia atentamente esse help -## # criar um texto com aspas +# ?Quotes # leia atentamente esse help +# # criar um texto com aspas #' #' Se você tentar executar o comando abaixo, perceberá que ele não funciona, porque as aspas são utilizadas para abrir e fechar textos. @@ -492,41 +492,41 @@ txt <- c("sem parenteses", "com ()") #' Não esqueçam de checar o `?` de cada função (e.g., `?dir`) para auxiliar no entendimento do funcionamento de cada uma das funções. #' ## ----eval = FALSE, echo = TRUE------------------------------------------------ -## # meu caminho -## caminho <- "~/Documents/DOC/PROJETO_DOC/R/pkgs/BOT89-introR/tutorial/" -## # lista todos os arquivos no caminho que sejam pdfs -## arqs <- dir(caminho, pattern = ".pdf") -## -## # renomeia os arquivos adicionando a data no final do nome -## # cria funcao para gerar novos nomes -## novonome <- function(x) { -## # separa as palavras -## xx <- strsplit(x, ".pdf")[[1]] -## # cola a data -## xx1 <- paste(xx, Sys.Date(), sep = "_") -## # junta novamente tudo -## xx <- paste(xx1, ".pdf", sep = "") -## # retorna o novo nome -## return(xx) -## } -## -## # agora copia cada arquivo para uma subpasta em caminho -## novapasta <- paste(caminho, "/pdfs", sep = "") -## dir.create(novapasta) -## -## # salva os arquivos com mesmo nome na nova pasta -## # cria uma funcao para isso -## salvaarq <- function(arq, origem, destino) { -## from <- paste(origem, "/", arq, sep = "") -## to <- paste(destino, "/", novonome(arq), sep = "") -## file.copy(from, to) -## } -## -## # aplica a funcao a todos os arquivos -## sapply(arqs, salvaarq, origem = caminho, destino = novapasta) -## -## # pronto os arquivos devem ter sido copiados -## dir(novapasta) +# # meu caminho +# caminho <- "~/Documents/DOC/PROJETO_DOC/R/pkgs/BOT89-introR/tutorial/" +# # lista todos os arquivos no caminho que sejam pdfs +# arqs <- dir(caminho, pattern = ".pdf") +# +# # renomeia os arquivos adicionando a data no final do nome +# # cria funcao para gerar novos nomes +# novonome <- function(x) { +# # separa as palavras +# xx <- strsplit(x, ".pdf")[[1]] +# # cola a data +# xx1 <- paste(xx, Sys.Date(), sep = "_") +# # junta novamente tudo +# xx <- paste(xx1, ".pdf", sep = "") +# # retorna o novo nome +# return(xx) +# } +# +# # agora copia cada arquivo para uma subpasta em caminho +# novapasta <- paste(caminho, "/pdfs", sep = "") +# dir.create(novapasta) +# +# # salva os arquivos com mesmo nome na nova pasta +# # cria uma funcao para isso +# salvaarq <- function(arq, origem, destino) { +# from <- paste(origem, "/", arq, sep = "") +# to <- paste(destino, "/", novonome(arq), sep = "") +# file.copy(from, to) +# } +# +# # aplica a funcao a todos os arquivos +# sapply(arqs, salvaarq, origem = caminho, destino = novapasta) +# +# # pronto os arquivos devem ter sido copiados +# dir(novapasta) #' #' diff --git a/codigo/09-amostragens_aleatorias.R b/codigo/09-amostragens_aleatorias.R index e921213..f218b74 100644 --- a/codigo/09-amostragens_aleatorias.R +++ b/codigo/09-amostragens_aleatorias.R @@ -87,7 +87,7 @@ hist(outraamostra, density = 10, add = T, col = "black") #' Esta função permite gerar essa distribuição de valores aleatórios que seguem uma distribuição normal se soubermos a média e o desvio padrão. #' ## ----eval = FALSE------------------------------------------------------------- -## ?rnorm # veja o help da função +# ?rnorm # veja o help da função #' ## ----------------------------------------------------------------------------- diff --git a/codigo/11-aed_checadados.R b/codigo/11-aed_checadados.R index 3b31971..ce66e9c 100644 --- a/codigo/11-aed_checadados.R +++ b/codigo/11-aed_checadados.R @@ -20,8 +20,8 @@ #' Vamos começar importando os dados ao R: #' ## ----eval = FALSE------------------------------------------------------------- -## ## Lendo a planilha com read.table -## avesc <- read.table("aves_cerrado.csv", row.names = 1, header = T, sep = ";", dec = ",", as.is = T, na.strings = c("NA", "", "NULL")) +# ## Lendo a planilha com read.table +# avesc <- read.table("aves_cerrado.csv", row.names = 1, header = T, sep = ";", dec = ",", as.is = T, na.strings = c("NA", "", "NULL")) #' ## ----include = FALSE---------------------------------------------------------- @@ -68,8 +68,8 @@ str(avesc) #' Próximo passo é sempre checar um sumário estatístico das variáveis presentes no objeto usando a função `summary()`: #' ## ----eval=FALSE, echo=TRUE---------------------------------------------------- -## # mostra um resumo da variacao nas colunas -## summary(avesc) +# # mostra um resumo da variacao nas colunas +# summary(avesc) #' ## ----eval=TRUE, echo=FALSE---------------------------------------------------- @@ -92,7 +92,7 @@ kable(summary(avesc)) #' Vejam o `?` da constante lógica `NA` para entender o significado dela no R: #' ## ----eval = FALSE------------------------------------------------------------- -## ?NA +# ?NA #' #' Continuemos de onde paramos na seção anterior. @@ -101,8 +101,8 @@ kable(summary(avesc)) #' Vamos checar primeiramanete a variável `avesc$urubu`: #' ## ----eval = FALSE------------------------------------------------------------- -## avesc$urubu == NA ## erro: não retorna verdadeiro ou falso -## avesc[avesc$urubu == NA, ] ## também não funciona +# avesc$urubu == NA ## erro: não retorna verdadeiro ou falso +# avesc[avesc$urubu == NA, ] ## também não funciona #' #' Reparem que os comandos acima, apesar de funcionarem, não respondem à nossa pergunta que é saber quais linhas possuem `NA`. @@ -298,7 +298,7 @@ str(avesc) #' ## ----eval=FALSE, echo=TRUE---------------------------------------------------- -## summary(avesc) +# summary(avesc) #' ## ----eval=TRUE, echo=FALSE---------------------------------------------------- diff --git a/codigo/12-aed_checaunivar.R b/codigo/12-aed_checaunivar.R index 11807d1..e66980b 100644 --- a/codigo/12-aed_checaunivar.R +++ b/codigo/12-aed_checaunivar.R @@ -19,8 +19,8 @@ #' Vamos importar novamente os conjuntos de dados de [avistamento de aves do cerrado](https://github.com/LABOTAM/IntroR/blob/main/dados/aves_cerrado.csv) (utilizado no capítulo \@ref(aed-checa-dados)) e de [parcelas em caixetais](https://github.com/LABOTAM/IntroR/blob/main/dados/caixeta.csv) (utilizado no capítulo \@ref(sumar-dados)): #' ## ----eval = FALSE------------------------------------------------------------- -## ## Lendo a planilha com read.table -## avesc <- read.table("aves_cerrado.csv", row.names = 1, header = T, sep = ";", dec = ",", as.is = T, na.strings = c("NA", "", "NULL")) +# ## Lendo a planilha com read.table +# avesc <- read.table("aves_cerrado.csv", row.names = 1, header = T, sep = ";", dec = ",", as.is = T, na.strings = c("NA", "", "NULL")) #' ## ----include = FALSE---------------------------------------------------------- @@ -28,8 +28,8 @@ load("dados/aves_cerrado.rda") #' ## ----eval = FALSE------------------------------------------------------------- -## caixeta <- read.csv("caixeta.csv") ## arquivo caixeta.csv deve estar no diretorio de trabalho -## # note que mantemos todos os argumentos padrão (veja o formato do arquivo caixeta) +# caixeta <- read.csv("caixeta.csv") ## arquivo caixeta.csv deve estar no diretorio de trabalho +# # note que mantemos todos os argumentos padrão (veja o formato do arquivo caixeta) #' ## ----include = FALSE, message=FALSE------------------------------------------- @@ -43,8 +43,8 @@ avesc[, 2:4] #' ## ----eval=FALSE, echo=TRUE---------------------------------------------------- -## # podemos fazer um resumo estatístico da distribuição de cada uma dessas colunas -## summary(avesc[, 2:4]) +# # podemos fazer um resumo estatístico da distribuição de cada uma dessas colunas +# summary(avesc[, 2:4]) #' ## ----eval=TRUE, echo=FALSE---------------------------------------------------- @@ -63,8 +63,8 @@ kable(summary(avesc[, 2:4])) #' #' ## ----eval = FALSE------------------------------------------------------------- -## # e não podemos fazer isso apenas com a função sd para todas as colunas -## sd(avesc[, 2:4]) # ops deprecado (eu estou trabalhando com uma matriz) +# # e não podemos fazer isso apenas com a função sd para todas as colunas +# sd(avesc[, 2:4]) # ops deprecado (eu estou trabalhando com uma matriz) #' #' @@ -113,8 +113,8 @@ abline(h = quantile(avesc$urubu, na.rm = TRUE), col = "blue", lwd = 2) #' #' ## ----eval = FALSE------------------------------------------------------------- -## # Média truncada = e.g. TIRANDO 10% DOS VALORES NOS EXTREMOS (posso ver como muda, caso tenha valores extremos, vai mudar muito) -## ?mean # veja o argumento trim +# # Média truncada = e.g. TIRANDO 10% DOS VALORES NOS EXTREMOS (posso ver como muda, caso tenha valores extremos, vai mudar muito) +# ?mean # veja o argumento trim #' #' @@ -246,8 +246,8 @@ dim(caixeta) #' #' ## ----eval = FALSE------------------------------------------------------------- -## # ve o histograma na forma de pontos: -## ?stripchart +# # ve o histograma na forma de pontos: +# ?stripchart #' #' @@ -286,7 +286,7 @@ par(olp) #' #' ## ----eval = FALSE------------------------------------------------------------- -## ?density # veja o help disso +# ?density # veja o help disso #' #' @@ -306,8 +306,8 @@ abline(v = mean(caixeta$h), col = "green", lwd = 2, lty = "solid") #' #' ## ----eval = FALSE------------------------------------------------------------- -## ## Adicionando uma curva da normal aos graficos -## ?dnorm # veja o help dessa função e suas variantes. veremos isso melhor abaixo +# ## Adicionando uma curva da normal aos graficos +# ?dnorm # veja o help dessa função e suas variantes. veremos isso melhor abaixo #' #' @@ -318,7 +318,7 @@ dnorm(seq(0, 1, by = 0.25), mean = mean(caixeta$h), sd = sd(caixeta$h)) # esses #' #' ## ----eval = FALSE------------------------------------------------------------- -## ?curve # veja que curve depende de uma função, ela traça a curva de uma f(x), num intervalo especificado de x (que foi plotado por hist) +# ?curve # veja que curve depende de uma função, ela traça a curva de uma f(x), num intervalo especificado de x (que foi plotado por hist) #' #' @@ -341,13 +341,13 @@ curve(expr = dnorm(x, mean = mean(caixeta$h), sd = sd(caixeta$h)), add = T, col #' A função `rnorm()` gera um conjunto de dados aleatórios que tem distribuição normal. #' ## ----eval = FALSE------------------------------------------------------------- -## # Teste de normalidade -## ###################################### -## ## Exemplo para o qqplot -## ########################################## -## -## # vamos simular valores -## ?rnorm # funcao que gera valores aleatórios que seguem uma distribuicao normal +# # Teste de normalidade +# ###################################### +# ## Exemplo para o qqplot +# ########################################## +# +# # vamos simular valores +# ?rnorm # funcao que gera valores aleatórios que seguem uma distribuicao normal #' #' @@ -400,8 +400,8 @@ abline(0, 1, col = "red") # relacao esperada, caso os dados venham de uma popula #' #' ## ----eval = FALSE------------------------------------------------------------- -## ## A funcao qqnorm ja faz isto de uma vez para voce: -## ?qqnorm # veja o help +# ## A funcao qqnorm ja faz isto de uma vez para voce: +# ?qqnorm # veja o help #' ## ----------------------------------------------------------------------------- diff --git a/codigo/13-aed_checabivar.R b/codigo/13-aed_checabivar.R index 6450164..17de494 100644 --- a/codigo/13-aed_checabivar.R +++ b/codigo/13-aed_checabivar.R @@ -12,8 +12,8 @@ #' Vamos importar novamente os conjuntos de dados de [avistamento de aves do cerrado](https://github.com/LABOTAM/IntroR/blob/main/dados/aves_cerrado.csv) (utilizado no capítulo \@ref(aed-checa-dados)) e de [parcelas em caixetais](https://github.com/LABOTAM/IntroR/blob/main/dados/caixeta.csv) (utilizado no capítulo \@ref(sumar-dados)): #' ## ----eval = FALSE------------------------------------------------------------- -## ## Lendo a planilha com read.table -## avesc <- read.table("aves_cerrado.csv", row.names = 1, header = T, sep = ";", dec = ",", as.is = T, na.strings = c("NA", "", "NULL")) +# ## Lendo a planilha com read.table +# avesc <- read.table("aves_cerrado.csv", row.names = 1, header = T, sep = ";", dec = ",", as.is = T, na.strings = c("NA", "", "NULL")) #' ## ----include = FALSE---------------------------------------------------------- @@ -21,8 +21,8 @@ load("dados/aves_cerrado.rda") #' ## ----eval = FALSE------------------------------------------------------------- -## caixeta <- read.csv("caixeta.csv") ## arquivo caixeta.csv deve estar no diretorio de trabalho -## # note que mantemos todos os argumentos padrão (veja o formato do arquivo caixeta) +# caixeta <- read.csv("caixeta.csv") ## arquivo caixeta.csv deve estar no diretorio de trabalho +# # note que mantemos todos os argumentos padrão (veja o formato do arquivo caixeta) #' ## ----include = FALSE, message=FALSE------------------------------------------- @@ -42,7 +42,7 @@ class(tb) #' ## ----echo=TRUE, eval=FALSE---------------------------------------------------- -## tb +# tb #' ## ----echo=FALSE, eval=TRUE---------------------------------------------------- @@ -63,7 +63,7 @@ tb <- tb[order(total, decreasing = T), ] #' ## ----echo=TRUE, eval=FALSE---------------------------------------------------- -## head(tb) +# head(tb) #' ## ----echo=FALSE, eval=TRUE---------------------------------------------------- @@ -77,7 +77,7 @@ tb[tb > 0] <- 1 #' ## ----echo=TRUE, eval=FALSE---------------------------------------------------- -## head(tb) +# head(tb) #' ## ----echo=FALSE, eval=TRUE---------------------------------------------------- @@ -92,9 +92,9 @@ apply(tb, 2, sum) #' A função `xtabs()` tabula dados de frequência. #' ## ----eval = FALSE------------------------------------------------------------- -## ## xtabs: tabulacao de dados de frequencia -## ## Vamos usar Dataframe dos sobreviventes dos sobreviventes e mortos do Titanic -## ?Titanic # veja o que são esses dados +# ## xtabs: tabulacao de dados de frequencia +# ## Vamos usar Dataframe dos sobreviventes dos sobreviventes e mortos do Titanic +# ?Titanic # veja o que são esses dados #' #' @@ -113,13 +113,13 @@ str(tit) #' #' ## ----eval = FALSE------------------------------------------------------------- -## ## Precisamos da funcao xtabs -## ?xtabs # veja o help dessa funcão: +# ## Precisamos da funcao xtabs +# ?xtabs # veja o help dessa funcão: #' #' ## ----eval=FALSE, echo=TRUE---------------------------------------------------- -## xtabs(Freq ~ Sex + Survived, data = tit) +# xtabs(Freq ~ Sex + Survived, data = tit) #' ## ----eval=TRUE, echo=FALSE---------------------------------------------------- @@ -132,7 +132,7 @@ tb <- xtabs(Freq ~ Sex + Survived, data = tit) #' ## ----eval=FALSE, echo=TRUE---------------------------------------------------- -## prop.table(tb, margin = 1) +# prop.table(tb, margin = 1) #' ## ----eval=TRUE, echo=FALSE---------------------------------------------------- @@ -140,8 +140,8 @@ kable(prop.table(tb, margin = 1)) #' ## ----eval=FALSE, echo=TRUE---------------------------------------------------- -## # ou, se preferir -## round(prop.table(tb, margin = 1) * 100) +# # ou, se preferir +# round(prop.table(tb, margin = 1) * 100) #' ## ----eval=TRUE, echo=FALSE---------------------------------------------------- @@ -150,8 +150,8 @@ kable(round(prop.table(tb, margin = 1) * 100)) #' ## ----eval=FALSE, echo=TRUE---------------------------------------------------- -## # Quanto sobreviventes por classe de viagem? -## xtabs(Freq ~ Class + Survived, data = tit) +# # Quanto sobreviventes por classe de viagem? +# xtabs(Freq ~ Class + Survived, data = tit) #' ## ----eval=TRUE, echo=FALSE---------------------------------------------------- @@ -165,9 +165,9 @@ sum(tit[tit$Class == "1st" & tit$Survived == "Yes", "Freq"]) #' ## ----eval=FALSE, echo=TRUE---------------------------------------------------- -## # ou seja, a funcao xtabs calculou a soma da frequencia -## # porcentagem -## prop.table(xtabs(Freq ~ Class + Survived, data = tit), margin = 1) +# # ou seja, a funcao xtabs calculou a soma da frequencia +# # porcentagem +# prop.table(xtabs(Freq ~ Class + Survived, data = tit), margin = 1) #' ## ----eval=TRUE, echo=FALSE---------------------------------------------------- @@ -182,7 +182,7 @@ tb2 <- xtabs(Freq ~ Class + Survived + Sex, data = tit) #' #' ## ----echo=TRUE, eval=FALSE---------------------------------------------------- -## tb2 # veja o resultado e observe duas virgulas +# tb2 # veja o resultado e observe duas virgulas #' ## ----echo=FALSE, eval=TRUE---------------------------------------------------- @@ -190,7 +190,7 @@ kable(tb2) # veja o resultado e observe duas virgulas #' ## ----echo=TRUE, eval=FALSE---------------------------------------------------- -## tb2[, , 1] # para Female +# tb2[, , 1] # para Female #' ## ----echo=FALSE, eval=TRUE---------------------------------------------------- @@ -198,7 +198,7 @@ kable(tb2[, , 1]) #' ## ----echo=TRUE, eval=FALSE---------------------------------------------------- -## tb2[, , 2] # note que não vimos isso antes, tb2, neste caso é um array, que um objeto que pode ter múltiplas dimensões, por isso as duas vírgulas, porque tem 3 dimensoes +# tb2[, , 2] # note que não vimos isso antes, tb2, neste caso é um array, que um objeto que pode ter múltiplas dimensões, por isso as duas vírgulas, porque tem 3 dimensoes #' ## ----echo=FALSE, eval=TRUE---------------------------------------------------- @@ -211,8 +211,8 @@ kable(tb2[, , 2]) #' A função `aggregate()` faz o mesmo, mas permite múltiplos fatores e retorna um `data.frame`. #' ## ----eval = FALSE------------------------------------------------------------- -## ## tapply: resumo de uma variavel numerica, separada por niveis de um ou mais fatores -## ?tapply # veja o help dessa função +# ## tapply: resumo de uma variavel numerica, separada por niveis de um ou mais fatores +# ?tapply # veja o help dessa função #' #' @@ -231,7 +231,7 @@ tapply(avesc$seriema, avesc$fisionomia, mean) #' #' ## ----eval = FALSE------------------------------------------------------------- -## ?aggregate # veja o help dessa função +# ?aggregate # veja o help dessa função #' #' @@ -307,7 +307,7 @@ pairs(iris[, -ncol(iris)], pch = 21, bg = c("red", "green", "blue")[unclass(iris #' #' ## ----eval = FALSE------------------------------------------------------------- -## ?unclass # remove o atributo classe do objeto, então especies viram números +# ?unclass # remove o atributo classe do objeto, então especies viram números #' #' @@ -333,8 +333,8 @@ sort(vacima) == sort(vabaixo) #' As funções `xyplot()` e `bwplot()` são oriundas do pacote `lattice` [@R-lattice] e permitem visualizar rapidamente relações entre variáveis por subgrupos de forma simples e rápida. #' ## ----eval = FALSE------------------------------------------------------------- -## # muitas funções do R interpretam formulas, que é uma forma simbólica curta para designar coisas complexas -## ?formula # leia com atenção a sessão de detalhes de como você pode especificar formulas, se ainda não fez isso, pois isso é uma forma de indicar ao R um modelo para graficar +# # muitas funções do R interpretam formulas, que é uma forma simbólica curta para designar coisas complexas +# ?formula # leia com atenção a sessão de detalhes de como você pode especificar formulas, se ainda não fez isso, pois isso é uma forma de indicar ao R um modelo para graficar #' #' @@ -357,8 +357,8 @@ library("lattice") # carregue o pacote #' #' ## ----eval = FALSE------------------------------------------------------------- -## # qual a relacao entre comprimento de sepalas e comprimento de petalas por especie? -## ?xyplot # veja o help dessa funcao +# # qual a relacao entre comprimento de sepalas e comprimento de petalas por especie? +# ?xyplot # veja o help dessa funcao #' #' @@ -372,7 +372,7 @@ xyplot(Sepal.Length + Sepal.Width ~ Petal.Length + Petal.Width | Species, data = #' #' ## ----eval = FALSE------------------------------------------------------------- -## ?bwplot # para multiplos boxplots +# ?bwplot # para multiplos boxplots #' #' diff --git a/codigo/14-aed_checamultivar.R b/codigo/14-aed_checamultivar.R index c219e19..c684e75 100644 --- a/codigo/14-aed_checamultivar.R +++ b/codigo/14-aed_checamultivar.R @@ -4,9 +4,9 @@ #' Caso você não possua algum dos pacotes listados, lembre-se de instalar cada um utilizando o comando abaixo: #' ## ----eval = FALSE------------------------------------------------------------- -## # Para instalar pacotes no R, use a funcao `install.packages()` -## install.packages("ape") -## install.packages("labdsv") +# # Para instalar pacotes no R, use a funcao `install.packages()` +# install.packages("ape") +# install.packages("labdsv") #' #' Carregue-os todos e siga em frente. @@ -79,9 +79,9 @@ d == dist(pontos, method = "eucl") #' Vamos utilizar o conjunto de [dados contendo coordenadas geográficas de municípios do Brasil](https://github.com/LABOTAM/IntroR/blob/main/dados/municipiosbrasil.csv) para esta prática, utilizado na seção \@ref(import-dados). #' ## ----eval = FALSE------------------------------------------------------------- -## # visualizando distancias usando NMDS -## # Vamos usar o arquivo com coordenadas dos municipios brasileiros -## muni <- read.table(file = "municipiosbrasil.csv", header = T, as.is = T, sep = "\t", na.strings = c("NA", "", "NULL")) +# # visualizando distancias usando NMDS +# # Vamos usar o arquivo com coordenadas dos municipios brasileiros +# muni <- read.table(file = "municipiosbrasil.csv", header = T, as.is = T, sep = "\t", na.strings = c("NA", "", "NULL")) #' ## ----include = FALSE---------------------------------------------------------- @@ -104,8 +104,8 @@ mdist <- dist(muni[, c("Longitude", "Latitude")], method = "euclidean") #' #' ## ----eval = FALSE------------------------------------------------------------- -## # calculando um nmds em dois eixos (reduzindo a variação na matriz em dois eixos) -## ?bestnmds +# # calculando um nmds em dois eixos (reduzindo a variação na matriz em dois eixos) +# ?bestnmds #' #' Vamos utilizar a função `bestnmds` do pacote `labdsv` @@ -161,8 +161,8 @@ head(iris) #' #' ## ----eval = FALSE------------------------------------------------------------- -## # calcula a distancia morfológica -## ?dist +# # calcula a distancia morfológica +# ?dist #' #' @@ -172,8 +172,8 @@ dmorfo <- dist(iris[, 1:4], method = "eucl") #' #' ## ----eval = FALSE------------------------------------------------------------- -## # calculando um nmds em dois eixos -## onmds <- bestnmds(dmorfo, k = 2) +# # calculando um nmds em dois eixos +# onmds <- bestnmds(dmorfo, k = 2) #' ## ----------------------------------------------------------------------------- @@ -189,10 +189,10 @@ iris2 <- iris[-102, ] #' #' ## ----eval = FALSE------------------------------------------------------------- -## # calculamos novamente a distancia -## dmorfo <- dist(iris2[, 1:4], method = "eucl") -## # calculando um nmds em dois eixos -## onmds <- bestnmds(dmorfo, k = 2) +# # calculamos novamente a distancia +# dmorfo <- dist(iris2[, 1:4], method = "eucl") +# # calculando um nmds em dois eixos +# onmds <- bestnmds(dmorfo, k = 2) #' ## ----include = FALSE---------------------------------------------------------- @@ -241,8 +241,8 @@ iris2 <- iris[-102, ] #' #' ## ----eval = FALSE------------------------------------------------------------- -## dmorfo2 <- vegdist(iris2[, 1:4], method = "gower") -## onmds2 <- bestnmds(dmorfo2, k = 2) +# dmorfo2 <- vegdist(iris2[, 1:4], method = "gower") +# onmds2 <- bestnmds(dmorfo2, k = 2) #' ## ----include = FALSE---------------------------------------------------------- @@ -289,8 +289,8 @@ plot(ptsnmds2, pch = 21, bg = cores, cex = 0.8, xlab = "NMDS 1", ylab = "NMDS 2" #' #' ## ----eval = FALSE------------------------------------------------------------- -## # Vamos usar o arquivo com coordenadas dos municipios brasileiros -## muni <- read.table(file = "municipiosbrasil.csv", header = T, as.is = T, sep = "\t", na.strings = c("NA", "", "NULL")) +# # Vamos usar o arquivo com coordenadas dos municipios brasileiros +# muni <- read.table(file = "municipiosbrasil.csv", header = T, as.is = T, sep = "\t", na.strings = c("NA", "", "NULL")) #' ## ----include = FALSE---------------------------------------------------------- @@ -311,9 +311,9 @@ mdist <- dist(muni[, c("Longitude", "Latitude")], method = "euclidean") #' #' ## ----eval = FALSE------------------------------------------------------------- -## # veja o help de hclust e também -## # os diferente métodos de agrupamento -## ?hclust +# # veja o help de hclust e também +# # os diferente métodos de agrupamento +# ?hclust #' #' ### Agrupamento pelo método da mínima variância @@ -342,7 +342,7 @@ plot(gp3, hang = 0.1, main = "Cidades da região norte", ylab = "Distância geog #' Vamos converter nossos objetos `gp` e `gp3` para objetos de classe `phylo`, e gerar um gráfico para cada um. #' ## ----eval = FALSE------------------------------------------------------------- -## ?plot.phylo +# ?plot.phylo #' #' @@ -384,7 +384,7 @@ plot(as.phylo(gp), type = "phylogram", label.offset = 0.1, cex = 0.8, use.edge.l #' #' ## ----eval = FALSE------------------------------------------------------------- -## caixeta <- read.table("caixeta.csv", sep = ",", header = T, na.strings = c("NA", "", "NULL")) +# caixeta <- read.table("caixeta.csv", sep = ",", header = T, na.strings = c("NA", "", "NULL")) #' ## ----include = FALSE, message=FALSE------------------------------------------- @@ -392,7 +392,7 @@ load("dados/caixeta2.rda") #' ## ----eval=FALSE,echo=TRUE----------------------------------------------------- -## head(caixeta) +# head(caixeta) #' ## ----eval=TRUE,echo=FALSE----------------------------------------------------- @@ -411,7 +411,7 @@ tb <- table(parcelas, especies = caixeta$especie) #' ## ----eval=FALSE,echo=TRUE----------------------------------------------------- -## tb[, 1:5] +# tb[, 1:5] #' ## ----eval=TRUE,echo=FALSE----------------------------------------------------- @@ -434,7 +434,7 @@ tb2[tb2 > 0] <- 1 #' Vamos utilizar a função `vegdist()` do pacote `vegan`. #' ## ----eval = FALSE------------------------------------------------------------- -## ?vegdist +# ?vegdist #' #' @@ -449,9 +449,9 @@ as.matrix(djac)[1:4, 1:4] #' Podemos fazer um NMDS com esse resultado: #' ## ----eval = FALSE------------------------------------------------------------- -## onmds <- bestnmds(djac, k = 2) -## # parcelas 3 e 5 tem exatamente as mesmas espécies -## # vamos com colocar um valor super pequeno para essa distancia (quase zero) +# onmds <- bestnmds(djac, k = 2) +# # parcelas 3 e 5 tem exatamente as mesmas espécies +# # vamos com colocar um valor super pequeno para essa distancia (quase zero) #' #' @@ -461,8 +461,8 @@ djac[djac == 0] <- 0.0000000000000000001 #' #' ## ----eval = FALSE------------------------------------------------------------- -## # agora funciona -## onmds <- bestnmds(djac, k = 2) +# # agora funciona +# onmds <- bestnmds(djac, k = 2) #' ## ----include = FALSE---------------------------------------------------------- @@ -500,22 +500,22 @@ plot(cluster, ylab = "Dissimilaridade Florística (Jaccard)") #' Para aprimorar a figura, vamos utilizar a função `as.phylo()` do pacote `ape` [@R-ape] para converter o objeto `cluster` de classe `dendrogram` para um de classe `phylo`. #' ## ----eval = FALSE------------------------------------------------------------- -## pcl <- as.phylo(cluster) -## par(mar = c(5, 4, 3, 3)) -## plot(pcl, tip.color = cores, label.offset = 0.02, cex = 0.8) -## # pontos -## tiplabels(pch = 21, frame = NULL, bg = cores) -## # eixo -## axisPhylo() -## # nome do eixo -## mtext(text = "Jaccard índice (0 ou 1)", side = 1, line = 2.5) -## legend("topleft", legend = levels(locais), pch = 21:23, pt.bg = c("red", "green", "blue"), inset = 0.01, bty = "n", cex = 1, pt.cex = 1.5, y.intersp = 1.5) +# pcl <- as.phylo(cluster) +# par(mar = c(5, 4, 3, 3)) +# plot(pcl, tip.color = cores, label.offset = 0.02, cex = 0.8) +# # pontos +# tiplabels(pch = 21, frame = NULL, bg = cores) +# # eixo +# axisPhylo() +# # nome do eixo +# mtext(text = "Jaccard índice (0 ou 1)", side = 1, line = 2.5) +# legend("topleft", legend = levels(locais), pch = 21:23, pt.bg = c("red", "green", "blue"), inset = 0.01, bty = "n", cex = 1, pt.cex = 1.5, y.intersp = 1.5) #' #' Vamos repetir essa operação considerando a abundância de espécies por parcelas contidos no objeto `tb` (usamos o índice de Sorensen). #' ## ----eval=FALSE,echo=TRUE----------------------------------------------------- -## tb[1:4, 1:5] +# tb[1:4, 1:5] #' ## ----eval=TRUE,echo=FALSE----------------------------------------------------- @@ -529,7 +529,7 @@ dsor <- vegdist(tb, method = "bray") #' #' ## ----eval = FALSE------------------------------------------------------------- -## onmds2 <- bestnmds(dsor, k = 2) +# onmds2 <- bestnmds(dsor, k = 2) #' ## ----include = FALSE---------------------------------------------------------- @@ -586,9 +586,9 @@ barplot(tt, xlab = "Eixos MDS", ylab = "Variação explicada %") #' #' ## ----eval = FALSE------------------------------------------------------------- -## # fazendo uma figura com ordiplot -## # veja o help -## ?ordiplot +# # fazendo uma figura com ordiplot +# # veja o help +# ?ordiplot #' #' @@ -640,8 +640,8 @@ text(mls[, 1] * 0.8, mls[, 2] * 0.8, labels = rownames(mls), col = "black", cex #' Um exemplo: #' ## ----eval = FALSE------------------------------------------------------------- -## # análise de componentes principais -## ?prcomp +# # análise de componentes principais +# ?prcomp #' ## ----------------------------------------------------------------------------- @@ -663,9 +663,9 @@ names(meu.pca) #' Vamos fazer uma figura utilizando a função `ordiplot()` do pacote `vegan`: #' ## ----eval = FALSE------------------------------------------------------------- -## # fazendo uma figura com ordiplot -## # veja o help -## ?ordiplot +# # fazendo uma figura com ordiplot +# # veja o help +# ?ordiplot #' #' diff --git a/codigo/15-tidyverse.R b/codigo/15-tidyverse.R index a0ecf13..9aa8e4c 100644 --- a/codigo/15-tidyverse.R +++ b/codigo/15-tidyverse.R @@ -52,7 +52,7 @@ suppressMessages(library("tibble")) #' Primeiro vamos carregar o pacote para a sessão de trabalho: #' ## ----eval = FALSE------------------------------------------------------------- -## library("dplyr") +# library("dplyr") #' ## ----dplyrtb, eval = TRUE, echo = FALSE--------------------------------------- @@ -279,7 +279,7 @@ head( #' Primeiramente, carreguemos o pacote `magrittr`: #' ## ----eval = FALSE------------------------------------------------------------- -## library("magrittr") +# library("magrittr") #' #' Executando o conjunto de [comandos 1](#com1), temos: @@ -334,18 +334,18 @@ res2 #' Suponha que nós queiramos selecionar apenas as colunas `Species` e `Petal.Length` de `iris`. Podemos executar isso de duas maneiras, todas com o mesmo resultado: #' ## ----eval = FALSE------------------------------------------------------------- -## # podemos representar iris de três maneiras utilizando o operador `%>%` -## iris %>% select(Species, Petal.Length) # como temos feito ate aqui -## iris %>% select(., Species, Petal.Length) # explicitamos que `iris` esta dentro de select por meio do `.` +# # podemos representar iris de três maneiras utilizando o operador `%>%` +# iris %>% select(Species, Petal.Length) # como temos feito ate aqui +# iris %>% select(., Species, Petal.Length) # explicitamos que `iris` esta dentro de select por meio do `.` #' #' Isso pode ficar mais fácil de entender com outro exemplo. Suponha que tenhamos o vetor `meuvetor <- c(1:20)` e queiramos obter o somatório deste vetor. Podemos executar isso de três maneiras utilizando o operador `%>%`: #' ## ----eval = FALSE------------------------------------------------------------- -## meuvetor <- c(1:20) -## meuvetor %>% sum(.) # representando o vetor na forma de um `.` -## meuvetor %>% sum() # deixando a funcao vazia -## meuvetor %>% sum() # sem parenteses e sem o `.`. O que????? +# meuvetor <- c(1:20) +# meuvetor %>% sum(.) # representando o vetor na forma de um `.` +# meuvetor %>% sum() # deixando a funcao vazia +# meuvetor %>% sum() # sem parenteses e sem o `.`. O que????? #' #' Todas as maneiras acima executam e geram o mesmo resultado, `r sum(c(1:20))`. Essa multiplicidade de maneiras de expor o data.frame (ou o vetor no exemplo acima) é alvo de críticas por parte de alguns estudiosos, devido ao pacote `magrittr` não exigir que o argumento seja explícito quando usamos o operador `%>%` (vejam uma boa argumentação nesta postagem de [John Mount](http://www.win-vector.com/blog/2018/03/r-tip-make-arguments-explicit-in-magrittr-dplyr-pipelines/)). @@ -353,18 +353,18 @@ res2 #' Vale ressaltar que poderíamos muito bem encadear todas as ações executadas acima sem o operador `%>%`, porém perderíamos a chance de ler o código da esquerda para a direita, oportunidade ofertada pelo uso do operador. Vejamos, usando o conjunto de comandos 2: #' ## ----eval = FALSE------------------------------------------------------------- -## summarise( -## mutate( -## filter( -## select(iris, Species, Petal.Length, Sepal.Length), -## Species == "virginica" & Sepal.Length > 7 -## ), -## razaopetsep = Petal.Length / Sepal.Length -## ), -## N = n(), -## petala_l_media = mean(Petal.Length, na.rm = TRUE), -## sepala_l_media = mean(Sepal.Length, na.rm = TRUE) -## ) +# summarise( +# mutate( +# filter( +# select(iris, Species, Petal.Length, Sepal.Length), +# Species == "virginica" & Sepal.Length > 7 +# ), +# razaopetsep = Petal.Length / Sepal.Length +# ), +# N = n(), +# petala_l_media = mean(Petal.Length, na.rm = TRUE), +# sepala_l_media = mean(Sepal.Length, na.rm = TRUE) +# ) #' #' Reparem que o código fica mais difícil de ser lido, pois temos de identificar primeiro quem é o `data.frame` que serve de entrada para a função `summarise`. diff --git a/pkg-bib.bib b/pkg-bib.bib index 9103d33..7699303 100644 --- a/pkg-bib.bib +++ b/pkg-bib.bib @@ -1,9 +1,9 @@ @Manual{R-ape, title = {ape: Analyses of Phylogenetics and Evolution}, - author = {Emmanuel Paradis and Simon Blomberg and Ben Bolker and Joseph Brown and Santiago Claramunt and Julien Claude and Hoa Sien Cuong and Richard Desper and Gilles Didier and Benoit Durand and Julien Dutheil and RJ Ewing and Olivier Gascuel and Thomas Guillerme and Christoph Heibl and Anthony Ives and Bradley Jones and Franz Krah and Daniel Lawson and Vincent Lefort and Pierre Legendre and Jim Lemon and Guillaume Louvel and Eric Marcon and Rosemary McCloskey and Johan Nylander and Rainer Opgen-Rhein and Andrei-Alin Popescu and Manuela Royer-Carenzi and Klaus Schliep and Korbinian Strimmer and Damien {de Vienne}}, - year = {2023}, - note = {R package version 5.7-1}, - url = {http://ape-package.ird.fr/}, + author = {Emmanuel Paradis and Simon Blomberg and Ben Bolker and Joseph Brown and Santiago Claramunt and Julien Claude and Hoa Sien Cuong and Richard Desper and Gilles Didier and Benoit Durand and Julien Dutheil and RJ Ewing and Olivier Gascuel and Thomas Guillerme and Christoph Heibl and Anthony Ives and Bradley Jones and Franz Krah and Daniel Lawson and Vincent Lefort and Pierre Legendre and Jim Lemon and Guillaume Louvel and Federico Marotta and Eric Marcon and Rosemary McCloskey and Johan Nylander and Rainer Opgen-Rhein and Andrei-Alin Popescu and Manuela Royer-Carenzi and Klaus Schliep and Korbinian Strimmer and Damien {de Vienne}}, + year = {2024}, + note = {R package version 5.8-1}, + url = {https://github.com/emmanuelparadis/ape}, } @Manual{R-base, @@ -11,64 +11,62 @@ @Manual{R-base author = {{R Core Team}}, organization = {R Foundation for Statistical Computing}, address = {Vienna, Austria}, - year = {2023}, + year = {2025}, url = {https://www.R-project.org/}, } @Manual{R-bookdown, title = {bookdown: Authoring Books and Technical Documents with R Markdown}, author = {Yihui Xie}, - note = {R package version 0.35.1}, + note = {R package version 0.42.1}, url = {https://github.com/rstudio/bookdown}, - year = {2023}, -} - -@Manual{R-data.table, - title = {data.table: Extension of `data.frame`}, - author = {Matt Dowle and Arun Srinivasan}, - year = {2023}, - note = {R package version 1.14.8}, - url = {https://r-datatable.com}, + year = {2025}, } @Manual{R-dplyr, title = {dplyr: A Grammar of Data Manipulation}, author = {Hadley Wickham and Romain François and Lionel Henry and Kirill Müller and Davis Vaughan}, year = {2023}, - note = {R package version 1.1.3}, + note = {R package version 1.1.4}, url = {https://dplyr.tidyverse.org}, } @Manual{R-ggplot2, title = {ggplot2: Create Elegant Data Visualisations Using the Grammar of Graphics}, - author = {Hadley Wickham and Winston Chang and Lionel Henry and Thomas Lin Pedersen and Kohske Takahashi and Claus Wilke and Kara Woo and Hiroaki Yutani and Dewey Dunnington}, - year = {2023}, - note = {R package version 3.4.3}, + author = {Hadley Wickham and Winston Chang and Lionel Henry and Thomas Lin Pedersen and Kohske Takahashi and Claus Wilke and Kara Woo and Hiroaki Yutani and Dewey Dunnington and Teun {van den Brand}}, + year = {2024}, + note = {R package version 3.5.1}, url = {https://ggplot2.tidyverse.org}, } @Manual{R-kableExtra, title = {kableExtra: Construct Complex Table with kable and Pipe Syntax}, author = {Hao Zhu}, - year = {2021}, - note = {R package version 1.3.4}, + year = {2024}, + note = {R package version 1.4.0}, url = {http://haozhu233.github.io/kableExtra/}, } @Manual{R-knitr, title = {knitr: A General-Purpose Package for Dynamic Report Generation in R}, author = {Yihui Xie}, - year = {2023}, - note = {R package version 1.44}, + year = {2025}, + note = {R package version 1.50}, url = {https://yihui.org/knitr/}, } +@Manual{R-labdsv, + title = {labdsv: Ordination and Multivariate Analysis for Ecology}, + author = {David W. Roberts}, + year = {2023}, + note = {R package version 2.1-0}, +} @Manual{R-lattice, title = {lattice: Trellis Graphics for R}, author = {Deepayan Sarkar}, - year = {2023}, - note = {R package version 0.21-8}, + year = {2024}, + note = {R package version 0.22-6}, url = {https://lattice.r-forge.r-project.org/}, } @@ -80,13 +78,27 @@ @Manual{R-magrittr url = {https://magrittr.tidyverse.org}, } +@Manual{R-maps, + title = {maps: Draw Geographical Maps}, + author = {Alex Deckmyn}, + year = {2024}, + note = {R package version 3.4.2.1}, +} +@Manual{R-mgcv, + title = {mgcv: Mixed GAM Computation Vehicle with Automatic Smoothness +Estimation}, + author = {Simon Wood}, + year = {2023}, + note = {R package version 1.9-1}, + url = {https://CRAN.R-project.org/package=mgcv}, +} @Manual{R-nlme, title = {nlme: Linear and Nonlinear Mixed Effects Models}, author = {José Pinheiro and Douglas Bates and {R Core Team}}, - year = {2023}, - note = {R package version 3.1-162}, + year = {2025}, + note = {R package version 3.1-167}, url = {https://svn.r-project.org/R-packages/trunk/nlme/}, } @@ -110,44 +122,34 @@ @Manual{R-printr @Manual{R-purrr, title = {purrr: Functional Programming Tools}, author = {Hadley Wickham and Lionel Henry}, - year = {2023}, - note = {R package version 1.0.2}, + year = {2025}, + note = {R package version 1.0.4}, url = {https://purrr.tidyverse.org/}, } @Manual{R-readr, title = {readr: Read Rectangular Text Data}, author = {Hadley Wickham and Jim Hester and Jennifer Bryan}, - year = {2023}, - note = {R package version 2.1.4}, + year = {2024}, + note = {R package version 2.1.5}, url = {https://readr.tidyverse.org}, } -@Manual{R-rgdal, - title = {rgdal: Bindings for the Geospatial Data Abstraction Library}, - author = {Roger Bivand and Tim Keitt and Barry Rowlingson}, - year = {2023}, - note = {R package version 1.6-7}, - url = {http://rgdal.r-forge.r-project.org}, -} - @Manual{R-rmarkdown, title = {rmarkdown: Dynamic Documents for R}, author = {JJ Allaire and Yihui Xie and Christophe Dervieux and Jonathan McPherson and Javier Luraschi and Kevin Ushey and Aron Atkins and Hadley Wickham and Joe Cheng and Winston Chang and Richard Iannone}, - year = {2023}, - note = {R package version 2.25}, + year = {2024}, + note = {R package version 2.29}, url = {https://github.com/rstudio/rmarkdown}, } -@Manual{R-taxize, - title = {taxize: Taxonomic Information from Around the Web}, - author = {Scott Chamberlain and Eduard Szoecs and Zachary Foster and Zebulun Arendsee}, - year = {2022}, - note = {R package version 0.9.100}, - url = {https://docs.ropensci.org/taxize/}, +@Manual{R-TeachingDemos, + title = {TeachingDemos: Demonstrations for Teaching and Learning}, + author = {Greg Snow}, + year = {2024}, + note = {R package version 2.13}, } - @Manual{R-tibble, title = {tibble: Simple Data Frames}, author = {Kirill Müller and Hadley Wickham}, @@ -159,16 +161,16 @@ @Manual{R-tibble @Manual{R-tidyr, title = {tidyr: Tidy Messy Data}, author = {Hadley Wickham and Davis Vaughan and Maximilian Girlich}, - year = {2023}, - note = {R package version 1.3.0}, + year = {2024}, + note = {R package version 1.3.1}, url = {https://tidyr.tidyverse.org}, } @Manual{R-vegan, title = {vegan: Community Ecology Package}, - author = {Jari Oksanen and Gavin L. Simpson and F. Guillaume Blanchet and Roeland Kindt and Pierre Legendre and Peter R. Minchin and R.B. O'Hara and Peter Solymos and M. Henry H. Stevens and Eduard Szoecs and Helene Wagner and Matt Barbour and Michael Bedward and Ben Bolker and Daniel Borcard and Gustavo Carvalho and Michael Chirico and Miquel {De Caceres} and Sebastien Durand and Heloisa Beatriz Antoniazi Evangelista and Rich FitzJohn and Michael Friendly and Brendan Furneaux and Geoffrey Hannigan and Mark O. Hill and Leo Lahti and Dan McGlinn and Marie-Helene Ouellette and Eduardo {Ribeiro Cunha} and Tyler Smith and Adrian Stier and Cajo J.F. {Ter Braak} and James Weedon}, - year = {2022}, - note = {R package version 2.6-4}, + author = {Jari Oksanen and Gavin L. Simpson and F. Guillaume Blanchet and Roeland Kindt and Pierre Legendre and Peter R. Minchin and R.B. O'Hara and Peter Solymos and M. Henry H. Stevens and Eduard Szoecs and Helene Wagner and Matt Barbour and Michael Bedward and Ben Bolker and Daniel Borcard and Gustavo Carvalho and Michael Chirico and Miquel {De Caceres} and Sebastien Durand and Heloisa Beatriz Antoniazi Evangelista and Rich FitzJohn and Michael Friendly and Brendan Furneaux and Geoffrey Hannigan and Mark O. Hill and Leo Lahti and Dan McGlinn and Marie-Helene Ouellette and Eduardo {Ribeiro Cunha} and Tyler Smith and Adrian Stier and Cajo J.F. {Ter Braak} and James Weedon and Tuomas Borman}, + year = {2025}, + note = {R package version 2.6-10}, url = {https://github.com/vegandevs/vegan}, } @@ -310,11 +312,3 @@ @Book{rmarkdown2020 url = {https://bookdown.org/yihui/rmarkdown-cookbook}, } -@Article{taxize2013, - title = {taxize - taxonomic search and retrieval in R}, - journal = {F1000Research}, - author = {{Scott Chamberlain} and {Eduard Szocs}}, - year = {2013}, - url = {https://f1000research.com/articles/2-191/v2}, -} - From 780e13d29f3b12160f8905fa00c62768a7bc3972 Mon Sep 17 00:00:00 2001 From: Ricardo Perdiz Date: Wed, 2 Apr 2025 12:22:03 -0400 Subject: [PATCH 2/2] atualiza renv --- renv.lock | 585 +++++++++++++++++++++--------------------------------- 1 file changed, 226 insertions(+), 359 deletions(-) diff --git a/renv.lock b/renv.lock index 45442c7..3270d51 100644 --- a/renv.lock +++ b/renv.lock @@ -1,6 +1,6 @@ { "R": { - "Version": "4.3.1", + "Version": "4.4.3", "Repositories": [ { "Name": "CRAN", @@ -11,7 +11,7 @@ "Packages": { "MASS": { "Package": "MASS", - "Version": "7.3-60", + "Version": "7.3-64", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -22,11 +22,11 @@ "stats", "utils" ], - "Hash": "a56a6365b3fa73293ea8d084be0d9bb0" + "Hash": "49d2d8090b74c1179df1aff16201caf8" }, "Matrix": { "Package": "Matrix", - "Version": "1.6-0", + "Version": "1.7-2", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -39,17 +39,17 @@ "stats", "utils" ], - "Hash": "31262fd18481fab05c5e7258dac163ca" + "Hash": "f6a81550f166acbe2cd5229e9ca079b9" }, "R6": { "Package": "R6", - "Version": "2.5.1", + "Version": "2.6.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R" ], - "Hash": "470851b6d5d0ac559e9d01bb352b4021" + "Hash": "d4335fe7207f1c01ab8c41762f5840d4" }, "RColorBrewer": { "Package": "RColorBrewer", @@ -63,41 +63,38 @@ }, "Rcpp": { "Package": "Rcpp", - "Version": "1.0.11", + "Version": "1.0.14", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "methods", "utils" ], - "Hash": "ae6cbbe1492f4de79c45fce06f967ce8" + "Hash": "e7bdd9ee90e96921ca8a0f1972d66682" }, "Rtsne": { "Package": "Rtsne", - "Version": "0.16", + "Version": "0.17", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "Rcpp", "stats" ], - "Hash": "e921b89ef921905fc89b95886675706d" + "Hash": "f81f7764a3c3e310b1d40e1a8acee19e" }, "TeachingDemos": { "Package": "TeachingDemos", - "Version": "2.12", + "Version": "2.13", "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "41e566d7eab7307a31b3dee3b203c7e0" + "Repository": "RSPM", + "Hash": "17d4f938a88bce968ee0bc10e4d4021b" }, "ape": { "Package": "ape", - "Version": "5.7-1", + "Version": "5.8-1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "Rcpp", @@ -110,17 +107,7 @@ "stats", "utils" ], - "Hash": "10705eec964349f270504754d8fe8ef1" - }, - "askpass": { - "Package": "askpass", - "Version": "1.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "sys" - ], - "Hash": "e8a22846fff485f0be3770c2da758713" + "Hash": "54e5b03e928da23e75dc5bb633648d27" }, "base64enc": { "Package": "base64enc", @@ -134,33 +121,39 @@ }, "bit": { "Package": "bit", - "Version": "4.0.5", + "Version": "4.6.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R" ], - "Hash": "d242abec29412ce988848d0294b208fd" + "Hash": "ebe86ffd194564abdc895d87742d5a29" }, "bit64": { "Package": "bit64", - "Version": "4.0.5", + "Version": "4.6.0-1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "bit", + "graphics", "methods", "stats", "utils" ], - "Hash": "9fe98599ca456d6552421db0d6772d8f" + "Hash": "4f572fbc586294afff277db583b9060f" }, "bookdown": { "Package": "bookdown", - "Version": "0.35", - "Source": "Repository", - "Repository": "CRAN", + "Version": "0.42.1", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteUsername": "rstudio", + "RemoteRepo": "bookdown", + "RemoteRef": "main", + "RemoteSha": "7ce33d466994f2556db816f78b1ce334bb032228", "Requirements": [ "R", "htmltools", @@ -171,62 +164,51 @@ "xfun", "yaml" ], - "Hash": "c6ff1e408f5f241cbcedc0ae28711163" + "Hash": "c3dfec73f0512d01900b10eedfc9efe0" }, "bslib": { "Package": "bslib", - "Version": "0.5.1", + "Version": "0.9.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "base64enc", "cachem", + "fastmap", "grDevices", "htmltools", "jquerylib", "jsonlite", + "lifecycle", "memoise", "mime", "rlang", "sass" ], - "Hash": "283015ddfbb9d7bf15ea9f0b5698f0d9" + "Hash": "70a6489cc254171fb9b4a7f130f44dca" }, "cachem": { "Package": "cachem", - "Version": "1.0.8", + "Version": "1.1.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "fastmap", "rlang" ], - "Hash": "c35768291560ce302c0a6589f92e837d" - }, - "callr": { - "Package": "callr", - "Version": "3.7.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "processx", - "utils" - ], - "Hash": "9b2191ede20fa29828139b9900922e51" + "Hash": "cd9a672193789068eb5a2aad65a0dedf" }, "cli": { "Package": "cli", - "Version": "3.6.1", + "Version": "3.6.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "utils" ], - "Hash": "89e6d8219950eac806ae0c489052048a" + "Hash": "b21916dd77a27642b447374a5d30ecf3" }, "clipr": { "Package": "clipr", @@ -240,7 +222,7 @@ }, "cluster": { "Package": "cluster", - "Version": "2.1.4", + "Version": "2.1.8", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -250,13 +232,13 @@ "stats", "utils" ], - "Hash": "5edbbabab6ce0bf7900a74fd4358628e" + "Hash": "b361779da7f8b129a1859b6cf243ba58" }, "colorspace": { "Package": "colorspace", - "Version": "2.1-0", + "Version": "2.1-1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "grDevices", @@ -264,56 +246,46 @@ "methods", "stats" ], - "Hash": "f20c47fd52fae58b4e377c37bb8c335b" + "Hash": "d954cb1c57e8d8b756165d7ba18aa55a" }, "cpp11": { "Package": "cpp11", - "Version": "0.4.6", + "Version": "0.5.2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R" ], - "Hash": "707fae4bbf73697ec8d85f9d7076c061" + "Hash": "2720e3fd3dad08f34b19b56b3d6f073d" }, "crayon": { "Package": "crayon", - "Version": "1.5.2", + "Version": "1.5.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "grDevices", "methods", "utils" ], - "Hash": "e8a1e41acf02548751f45c718d55aa6a" - }, - "curl": { - "Package": "curl", - "Version": "5.0.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "2118af9cb164c8d2dddc7b89eaf732d9" + "Hash": "859d96e65ef198fd43e82b9628d593ef" }, "digest": { "Package": "digest", - "Version": "0.6.33", + "Version": "0.6.37", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "utils" ], - "Hash": "b18a9cf3c003977b0cc49d5e76ebe48d" + "Hash": "33698c4b3127fc9f506654607fb73676" }, "dplyr": { "Package": "dplyr", - "Version": "1.1.2", + "Version": "1.1.4", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "R6", @@ -330,78 +302,66 @@ "utils", "vctrs" ], - "Hash": "dea6970ff715ca541c387de363ff405e" - }, - "ellipsis": { - "Package": "ellipsis", - "Version": "0.3.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "rlang" - ], - "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" + "Hash": "fedd9d00c2944ff00a0e2696ccf048ec" }, "evaluate": { "Package": "evaluate", - "Version": "0.21", + "Version": "1.0.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ - "R", - "methods" + "R" ], - "Hash": "d59f3b464e8da1aef82dc04b588b8dfb" + "Hash": "e9651417729bbe7472e32b5027370e79" }, "fansi": { "Package": "fansi", - "Version": "1.0.4", + "Version": "1.0.6", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "grDevices", "utils" ], - "Hash": "1d9e7ad3c8312a192dea7d3db0274fde" + "Hash": "962174cf2aeb5b9eea581522286a911f" }, "farver": { "Package": "farver", - "Version": "2.1.1", + "Version": "2.1.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "8106d78941f34855c440ddb946b8f7a5" + "Repository": "RSPM", + "Hash": "680887028577f3fa2a81e410ed0d6e42" }, "fastmap": { "Package": "fastmap", - "Version": "1.1.1", + "Version": "1.2.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "f7736a18de97dea803bde0a2daaafb27" + "Repository": "RSPM", + "Hash": "aa5e1cd11c2d15497494c5292d7ffcc8" }, "fontawesome": { "Package": "fontawesome", - "Version": "0.5.1", + "Version": "0.5.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "htmltools", "rlang" ], - "Hash": "1e22b8cabbad1eae951a75e9f8b52378" + "Hash": "bd1297f9b5b1fc1372d19e2c4cd82215" }, "fs": { "Package": "fs", - "Version": "1.6.3", + "Version": "1.6.5", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "methods" ], - "Hash": "47b5f30c720c23999b913a1a635cf0bb" + "Hash": "7f48af39fa27711ea5fbd183b399920d" }, "generics": { "Package": "generics", @@ -416,9 +376,9 @@ }, "ggplot2": { "Package": "ggplot2", - "Version": "3.4.3", + "Version": "3.5.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "MASS", "R", @@ -437,44 +397,45 @@ "vctrs", "withr" ], - "Hash": "85846544c596e71f8f46483ab165da33" + "Hash": "44c6a2f8202d5b7e878ea274b1092426" }, "glue": { "Package": "glue", - "Version": "1.6.2", + "Version": "1.8.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "methods" ], - "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e" + "Hash": "5899f1eaa825580172bb56c08266f37c" }, "gtable": { "Package": "gtable", - "Version": "0.3.3", + "Version": "0.3.6", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "cli", "glue", "grid", "lifecycle", - "rlang" + "rlang", + "stats" ], - "Hash": "b44addadb528a0d227794121c00572a0" + "Hash": "de949855009e2d4d0e52a844e30617ae" }, "highr": { "Package": "highr", - "Version": "0.10", + "Version": "0.11", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "xfun" ], - "Hash": "06230136b2d2b9ba5805e1963fa6e890" + "Hash": "d65ba49117ca223614f71b60d85b8ab7" }, "hms": { "Package": "hms", @@ -492,35 +453,19 @@ }, "htmltools": { "Package": "htmltools", - "Version": "0.5.6", + "Version": "0.5.8.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "base64enc", "digest", - "ellipsis", "fastmap", "grDevices", "rlang", "utils" ], - "Hash": "a2326a66919a3311f7fbb1e3bf568283" - }, - "httr": { - "Package": "httr", - "Version": "1.4.6", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "curl", - "jsonlite", - "mime", - "openssl" - ], - "Hash": "7e5e3cbd2a7bc07880c94e22348fb661" + "Hash": "81d371a9cc60640e74e4ab6ac46dcedc" }, "isoband": { "Package": "isoband", @@ -545,23 +490,22 @@ }, "jsonlite": { "Package": "jsonlite", - "Version": "1.8.7", + "Version": "2.0.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "methods" ], - "Hash": "266a20443ca13c65688b2116d5220f76" + "Hash": "b0776f526d36d8bd4a3344a88fe165c4" }, "kableExtra": { "Package": "kableExtra", - "Version": "1.3.4", + "Version": "1.4.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "digest", - "glue", "grDevices", "graphics", "htmltools", @@ -569,23 +513,21 @@ "magrittr", "rmarkdown", "rstudioapi", - "rvest", "scales", "stats", "stringr", "svglite", "tools", "viridisLite", - "webshot", "xml2" ], - "Hash": "49b625e6aabe4c5f091f5850aba8ff78" + "Hash": "532d16304274c23c8563f94b79351c86" }, "knitr": { "Package": "knitr", - "Version": "1.43", + "Version": "1.50", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "evaluate", @@ -595,7 +537,7 @@ "xfun", "yaml" ], - "Hash": "9775eb076713f627c07ce41d8199d8f6" + "Hash": "5a07d8ec459d7b80bd4acca5f4a6e062" }, "labdsv": { "Package": "labdsv", @@ -613,18 +555,18 @@ }, "labeling": { "Package": "labeling", - "Version": "0.4.2", + "Version": "0.4.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "graphics", "stats" ], - "Hash": "3d5108641f47470611a32d0bdf357a72" + "Hash": "b64ec208ac5bc1852b285f665d6368b3" }, "lattice": { "Package": "lattice", - "Version": "0.21-8", + "Version": "0.22-6", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -635,20 +577,20 @@ "stats", "utils" ], - "Hash": "0b8a6d63c8770f02a8b5635f3c431e6b" + "Hash": "cc5ac1ba4c238c7ca9fa6a87ca11a7e2" }, "lifecycle": { "Package": "lifecycle", - "Version": "1.0.3", + "Version": "1.0.4", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "cli", "glue", "rlang" ], - "Hash": "001cecbeac1cff9301bdc3775ee46a86" + "Hash": "b8552d117e1b808b09a832f589b79035" }, "magrittr": { "Package": "magrittr", @@ -662,15 +604,15 @@ }, "maps": { "Package": "maps", - "Version": "3.4.1", + "Version": "3.4.2.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "graphics", "utils" ], - "Hash": "644a88fb036ab50cee0b715394eefa1a" + "Hash": "354a8094c634031421eeb5103f2e1f80" }, "memoise": { "Package": "memoise", @@ -685,7 +627,7 @@ }, "mgcv": { "Package": "mgcv", - "Version": "1.9-0", + "Version": "1.9-1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -698,32 +640,32 @@ "stats", "utils" ], - "Hash": "086028ca0460d0c368028d3bda58f31b" + "Hash": "110ee9d83b496279960e162ac97764ce" }, "mime": { "Package": "mime", - "Version": "0.12", + "Version": "0.13", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "tools" ], - "Hash": "18e9c28c1d3ca1560ce30658b22ce104" + "Hash": "0ec19f34c72fab674d8f2b4b1c6410e1" }, "munsell": { "Package": "munsell", - "Version": "0.5.0", + "Version": "0.5.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "colorspace", "methods" ], - "Hash": "6dfe8bf774944bd5595785e3229d8771" + "Hash": "4fd8900853b746af55b81fda99da7695" }, "nlme": { "Package": "nlme", - "Version": "3.1-163", + "Version": "3.1-167", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -733,17 +675,7 @@ "stats", "utils" ], - "Hash": "8d1938040a05566f4f7a14af4feadd6b" - }, - "openssl": { - "Package": "openssl", - "Version": "2.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "askpass" - ], - "Hash": "273a6bb4a9844c296a459d2176673270" + "Hash": "abd9318b4073223646c0f9d3ed641904" }, "permute": { "Package": "permute", @@ -758,12 +690,11 @@ }, "pillar": { "Package": "pillar", - "Version": "1.9.0", + "Version": "1.10.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "cli", - "fansi", "glue", "lifecycle", "rlang", @@ -771,7 +702,7 @@ "utils", "vctrs" ], - "Hash": "15da5a8412f317beeee6175fbc76f4bb" + "Hash": "8b16b6097daef84cd3c40a6a7c5c9d86" }, "pkgconfig": { "Package": "pkgconfig", @@ -785,10 +716,13 @@ }, "prettyunits": { "Package": "prettyunits", - "Version": "1.1.1", + "Version": "1.2.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "95ef9167b75dde9d2ccc3c7528393e7e" + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "6b01fc98b1e86c4f705ce9dcfd2f57c7" }, "printr": { "Package": "printr", @@ -800,48 +734,25 @@ ], "Hash": "03e0d4cc8152eed9515f517a8153c085" }, - "processx": { - "Package": "processx", - "Version": "3.8.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "ps", - "utils" - ], - "Hash": "3efbd8ac1be0296a46c55387aeace0f3" - }, "progress": { "Package": "progress", - "Version": "1.2.2", + "Version": "1.2.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ + "R", "R6", "crayon", "hms", "prettyunits" ], - "Hash": "14dc9f7a3c91ebb14ec5bb9208a07061" - }, - "ps": { - "Package": "ps", - "Version": "1.7.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "709d852d33178db54b17c722e5b1e594" + "Hash": "f4625e061cb2865f111b47ff163a5ca6" }, "purrr": { "Package": "purrr", - "Version": "1.0.2", + "Version": "1.0.4", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "cli", @@ -850,7 +761,7 @@ "rlang", "vctrs" ], - "Hash": "1cba04a4e9414bdefc9dcaa99649a8dc" + "Hash": "cc8b5d43f90551fa6df0a6be5d640a4f" }, "rappdirs": { "Package": "rappdirs", @@ -864,9 +775,9 @@ }, "readr": { "Package": "readr", - "Version": "2.1.4", + "Version": "2.1.5", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "R6", @@ -883,7 +794,7 @@ "utils", "vroom" ], - "Hash": "b5047343b3825f37ad9d3b5d89aa1078" + "Hash": "9de96463d2117f6ac49980577939dfb3" }, "renv": { "Package": "renv", @@ -897,20 +808,20 @@ }, "rlang": { "Package": "rlang", - "Version": "1.1.1", + "Version": "1.1.4", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "utils" ], - "Hash": "a85c767b55f0bf9b7ad16c6d7baee5bb" + "Hash": "3eec01f8b1dee337674b2e34ab1f9bc1" }, "rmarkdown": { "Package": "rmarkdown", - "Version": "2.24", + "Version": "2.29", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "bslib", @@ -921,47 +832,26 @@ "jsonlite", "knitr", "methods", - "stringr", "tinytex", "tools", "utils", "xfun", "yaml" ], - "Hash": "3854c37590717c08c32ec8542a2e0a35" + "Hash": "df99277f63d01c34e95e3d2f06a79736" }, "rstudioapi": { "Package": "rstudioapi", - "Version": "0.15.0", + "Version": "0.17.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "5564500e25cffad9e22244ced1379887" - }, - "rvest": { - "Package": "rvest", - "Version": "1.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "httr", - "lifecycle", - "magrittr", - "rlang", - "selectr", - "tibble", - "withr", - "xml2" - ], - "Hash": "a4a5ac819a467808c60e36e92ddf195e" + "Repository": "RSPM", + "Hash": "5f90cd73946d706cfe26024294236113" }, "sass": { "Package": "sass", - "Version": "0.4.7", + "Version": "0.4.9", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R6", "fs", @@ -969,57 +859,46 @@ "rappdirs", "rlang" ], - "Hash": "6bd4d33b50ff927191ec9acbf52fd056" + "Hash": "d53dbfddf695303ea4ad66f86e99b95d" }, "scales": { "Package": "scales", - "Version": "1.2.1", + "Version": "1.3.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "R6", "RColorBrewer", + "cli", "farver", + "glue", "labeling", "lifecycle", "munsell", "rlang", "viridisLite" ], - "Hash": "906cb23d2f1c5680b8ce439b44c6fa63" - }, - "selectr": { - "Package": "selectr", - "Version": "0.4-2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "methods", - "stringr" - ], - "Hash": "3838071b66e0c566d55cc26bd6e27bf4" + "Hash": "c19df082ba346b0ffa6f833e92de34d1" }, "stringi": { "Package": "stringi", - "Version": "1.7.12", + "Version": "1.8.7", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "stats", "tools", "utils" ], - "Hash": "ca8bd84263c77310739d2cf64d84d7c9" + "Hash": "2b56088e23bdd58f89aebf43a0913457" }, "stringr": { "Package": "stringr", - "Version": "1.5.0", + "Version": "1.5.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "cli", @@ -1030,37 +909,35 @@ "stringi", "vctrs" ], - "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8" + "Hash": "960e2ae9e09656611e0b8214ad543207" }, "svglite": { "Package": "svglite", - "Version": "2.1.1", + "Version": "2.1.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "cpp11", "systemfonts" ], - "Hash": "29442899581643411facb66f4add846a" - }, - "sys": { - "Package": "sys", - "Version": "3.4.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "3a1be13d68d47a8cd0bfd74739ca1555" + "Hash": "124a41fdfa23e8691cb744c762f10516" }, "systemfonts": { "Package": "systemfonts", - "Version": "1.0.4", + "Version": "1.2.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", - "cpp11" + "cpp11", + "grid", + "jsonlite", + "lifecycle", + "tools", + "utils" ], - "Hash": "90b28393209827327de889f49935140a" + "Hash": "f8b2924480a2679e2bad9750646112fe" }, "tibble": { "Package": "tibble", @@ -1083,9 +960,9 @@ }, "tidyr": { "Package": "tidyr", - "Version": "1.3.0", + "Version": "1.3.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "cli", @@ -1102,13 +979,13 @@ "utils", "vctrs" ], - "Hash": "e47debdc7ce599b070c8e78e8ac0cfcf" + "Hash": "915fb7ce036c22a6a33b5a8adb712eb1" }, "tidyselect": { "Package": "tidyselect", - "Version": "1.2.0", + "Version": "1.2.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "cli", @@ -1118,44 +995,44 @@ "vctrs", "withr" ], - "Hash": "79540e5fcd9e0435af547d885f184fd5" + "Hash": "829f27b9c4919c16b593794a6344d6c0" }, "tinytex": { "Package": "tinytex", - "Version": "0.46", + "Version": "0.56", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "xfun" ], - "Hash": "0c41a73214d982f539c56a7773c7afa5" + "Hash": "68e6032b8c16f33fab8756e40a0dca1a" }, "tzdb": { "Package": "tzdb", - "Version": "0.4.0", + "Version": "0.5.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "cpp11" ], - "Hash": "f561504ec2897f4d46f0c7657e488ae1" + "Hash": "09e3961e87b7bafa4a9340bbb34aeda8" }, "utf8": { "Package": "utf8", - "Version": "1.2.3", + "Version": "1.2.4", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R" ], - "Hash": "1fe17157424bb09c48a8b3b550c753bc" + "Hash": "62b65c52671e6665f803ff02954446e9" }, "vctrs": { "Package": "vctrs", - "Version": "0.6.3", + "Version": "0.6.5", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "cli", @@ -1163,13 +1040,13 @@ "lifecycle", "rlang" ], - "Hash": "d0ef2856b83dc33ea6e255caf6229ee2" + "Hash": "c03fa420630029418f7e6da3667aac4a" }, "vegan": { "Package": "vegan", - "Version": "2.6-4", + "Version": "2.6-10", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "MASS", "R", @@ -1178,7 +1055,7 @@ "mgcv", "permute" ], - "Hash": "659fe7589b8e0b16baa49043a61a0ce0" + "Hash": "ab11d78eb1b480f6b4d8119b6d5ae09e" }, "viridisLite": { "Package": "viridisLite", @@ -1192,9 +1069,9 @@ }, "vroom": { "Package": "vroom", - "Version": "1.6.3", + "Version": "1.6.5", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "bit64", @@ -1214,62 +1091,52 @@ "vctrs", "withr" ], - "Hash": "8318e64ffb3a70e652494017ec455561" - }, - "webshot": { - "Package": "webshot", - "Version": "0.5.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "callr", - "jsonlite", - "magrittr" - ], - "Hash": "16858ee1aba97f902d24049d4a44ef16" + "Hash": "390f9315bc0025be03012054103d227c" }, "withr": { "Package": "withr", - "Version": "2.5.0", + "Version": "3.0.2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "grDevices", - "graphics", - "stats" + "graphics" ], - "Hash": "c0e49a9760983e81e55cdd9be92e7182" + "Hash": "cc2d62c76458d425210d1eb1478b30b4" }, "xfun": { "Package": "xfun", - "Version": "0.40", + "Version": "0.51", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ + "R", + "grDevices", "stats", "tools" ], - "Hash": "be07d23211245fc7d4209f54c4e4ffc8" + "Hash": "e1a3c06389a46d065c18bd4bbc27c64c" }, "xml2": { "Package": "xml2", - "Version": "1.3.5", + "Version": "1.3.8", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", - "methods" + "cli", + "methods", + "rlang" ], - "Hash": "6c40e5cfcc6aefd88110666e18c31f40" + "Hash": "f5130b2f3d461964bac93cc618013231" }, "yaml": { "Package": "yaml", - "Version": "2.3.7", + "Version": "2.3.10", "Source": "Repository", - "Repository": "CRAN", - "Hash": "0d0056cc5383fbc240ccd0cb584bf436" + "Repository": "RSPM", + "Hash": "51dab85c6c98e50a18d7551e9d49f76c" } } }