A primeira coisa que precisamos fazer é abrir o R. O R funciona com várias GUI (graphical user interface) diferentes inclusive a própria, mas nós recomendamos que vocês utilizem o RSTUDIO (https://www.rstudio.com) pois é uma interface mais amigável e prática para inciantes. Além disso, é a mesma que usamos (facilita o acompanhamento de vocês =D )!
Pode-se abrir o R direto pelo RSTUDIO. Na janela do console (embaixo, à esquerda), você pode conferir qual é a versão do R que está instalada no seu computador. É recomendável sempre se manter atualizado e utilizar a última versão disponível.
O R é uma ferramenta open source. Isso significa que qualquer pessoa pode contribuir disponibilizando aos usuários os novos métodos que estão desenvolvendo (e são muitos!!!). Eles ficam disponíveis por meio de pacotes que são publicados (seguindo regras específicas) em um repositório específico (CRAN). Para utilizar estes pacotes no seu computador, você precisa instalá-los e isso pode ser feito de diversas formas. Em RSTUDIO: (1) no menu ‘Tools > Install Packages’; (2) na área localizada abaixo à direita ‘aba Packages > Install’; ou (3) via comando:
install.packages(“stargazer”)
Ao começar a sua sessão de trabalho no R, você deve se assegurar de ter informado ao programa o diretório em que estão os seus dados e onde salvaremos os outputs produzidos pela programa (gráficos, tabelas…). Vamos checar e mudar o diretório:
getwd()
## [1] "/Users/rbrandt/Dropbox/SHARED/academic:others/EBC2015/revisados"
setwd('~/Desktop/2015EBC_mini_curso_R')
getwd()
## [1] "/Users/rbrandt/Desktop/2015EBC_mini_curso_R"
O próximo passo é uma rápida revisão de como o R funciona.
Os objetos no R são criados atribuindo valores a nomes. Cada novo nome é um novo objeto. Uma das (inúmeras) formas de fazer isso é usar o operador ‘<-’. Ele tem funciona como a função ‘assign’. Podemos dizer que é uma forma de atalho. Esses objetos ficam armazenamos no nosso ambiente de trabalho (workspace) e podemos chamá-los a qualquer momento:
PSDB <- 45
assign('PT', 13)
PSDB
## [1] 45
PT
## [1] 13
Um objeto pode ser mais do que apenas um número:
Corinthians <- 'Campeão dos Campeões'
Corinthians
## [1] "Campeão dos Campeões"
E pode conter mais de um elemento:
Palmeiras <- 'Alviverde Imponente'
Palmeiras
## [1] "Alviverde Imponente"
SaoPaulo <- 'Nunca serão!'
SaoPaulo
## [1] "Nunca serão!"
TimesPaulistas <- c(Corinthians, Palmeiras, SaoPaulo)
TimesPaulistas
## [1] "Campeão dos Campeões" "Alviverde Imponente" "Nunca serão!"
Pequeno parentesis
Qual a função de ‘c’? Você pode pedir uma ajuda ao R toda vez que não se lembrar o que uma determinada função faz, ou como usá-la.
?c
Outra forma mais completa é usar a função help.
help(c)
# mas por que a funcao help eh mais completa?
help(help)
Então quando você sabe de qual pacote é uma determinada função, você não precisa ter ele carregado para que o R consiga encontrar a informação que você busca.
help(pbtree)
## No documentation for 'pbtree' in specified packages and libraries:
## you could try '??pbtree'
help(pbtree, phytools)
Outra opção é carregar o pacote e então pedir ajuda.
require(phytools)
## Loading required package: phytools
## Loading required package: ape
## Loading required package: maps
help(pbtree)
voltando aos objetos
centena <- c(1:50, 51, 52:100)
centena
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
## [18] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
## [35] 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
## [52] 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
## [69] 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
## [86] 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
Qual a função de ‘:’?
Os nomes dos objetos são sensíveis a maiúsculas e minúsculas.
Obj <- centena + 1
Obj
## [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
## [18] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
## [35] 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
## [52] 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
## [69] 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
## [86] 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
obj <- Obj + 10
obj
## [1] 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
## [18] 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
## [35] 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
## [52] 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
## [69] 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
## [86] 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
OBJ
OBJ <- obj - Obj
OBJ
## [1] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
## [24] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
## [47] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
## [70] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
## [93] 10 10 10 10 10 10 10 10
Vocês já aprenderam que é possível também manipular os objetos usando operadores matemáticos. Acabamos criando vários objetos, eles estão todos no nosso workspace. Mas qual são eles? Podemos usar as funções ls() ou objects()
ls()
## [1] "centena" "Corinthians" "obj" "Obj"
## [5] "OBJ" "Palmeiras" "PSDB" "PT"
## [9] "SaoPaulo" "TimesPaulistas"
objects()
## [1] "centena" "Corinthians" "obj" "Obj"
## [5] "OBJ" "Palmeiras" "PSDB" "PT"
## [9] "SaoPaulo" "TimesPaulistas"
Você pode pedir ainda mais informação sobre todos os objetos usando a função ls.str() ou até informação mais detalhada sobre objetos específicos usando str().
ls.str()
## centena : num [1:100] 1 2 3 4 5 6 7 8 9 10 ...
## Corinthians : chr "Campeão dos Campeões"
## obj : num [1:100] 12 13 14 15 16 17 18 19 20 21 ...
## Obj : num [1:100] 2 3 4 5 6 7 8 9 10 11 ...
## OBJ : num [1:100] 10 10 10 10 10 10 10 10 10 10 ...
## Palmeiras : chr "Alviverde Imponente"
## PSDB : num 45
## PT : num 13
## SaoPaulo : chr "Nunca serão!"
## TimesPaulistas : chr [1:3] "Campeão dos Campeões" "Alviverde Imponente" ...
str(Corinthians)
## chr "Campeão dos Campeões"
Há 5 tipos principais de objetos no R: vetores (vector), fatores (factor), matrizes (matrix), conjunto de dados (data.frame) e listas (list). Cada objeto possui diferentes atributos e valores. Entender o tipo de objeto que você está trabalhando é importante para saber que tipos de manipulações vocês podem aplicar a cada um. Uma das formas de descobrir que tipos de objetos estão no seu workspace é usando is.___(), cuja resposta é lógica. Vamos tentar nos objetos que já criamos.
is.factor(Corinthians)
## [1] FALSE
is.matrix(Corinthians)
## [1] FALSE
is.data.frame(Corinthians)
## [1] FALSE
is.list(Corinthians)
## [1] FALSE
is.vector(Corinthians)
## [1] TRUE
Até aqui nós criamos e manipulamos vetores. Mas o que é um vetor para o R?
Vetor é um arranjo simples de números ou caracteres, por exemplo as medidas de uma única variável em uma amostra de indivíduos. É muito fácil aplicar operações matemáticas e funções para todos os valores de um vetor de uma vez, como vocês puderam observar nos exemplos acima. O vetor tem 2 atributos: ‘mode’ e ‘length’. É possível obtê-los usando mode() e lenght(). Vamos tentar.
A <- 1:5
mode(A)
## [1] "numeric"
length(A)
## [1] 5
B <- c("classe", "ordem", "família", "gênero", "espécie")
mode(B)
## [1] "character"
length(B)
## [1] 5
C <- c(FALSE, TRUE, TRUE, FALSE, TRUE)
mode(C)
## [1] "logical"
length(C)
## [1] 5
Há um vetor no meu workspace e não preciso mais utilizá-lo.
rm(SaoPaulo)
Acessando elementos de um vetor.
Use números inteiros em colchetes para indicar elementos específicos de um vetor. Vamos tentar.
x <- seq(0,3,by=0.5)
# 5o elemento do vetor x
x[5]
## [1] 2
# do 2o ao 6o elemento de x
x[2:6]
## [1] 0.5 1.0 1.5 2.0 2.5
# tudo exceto o primeiro elemento de x
x[2:length(x)]
## [1] 0.5 1.0 1.5 2.0 2.5 3.0
# tudo exceto o primeiro elemento de x
x[-1]
## [1] 0.5 1.0 1.5 2.0 2.5 3.0
# mude o valor do 6o elemento para 4.5
x[5] <- 4.5
x[5]
## [1] 4.5
Podemos também aplicar funções (aritméticas, estatísticas…) em um vetor ou entre eles. Vamos tentar algumas.
XX <- x + 3
x * XX
## [1] 0.00 1.75 4.00 6.75 33.75 13.75 18.00
mean(x + XX)/2
## [1] 3.357143
max(XX)
## [1] 7.5
min(x)
## [1] 0
sum(x)
## [1] 13
sqrt(x^2)
## [1] 0.0 0.5 1.0 1.5 4.5 2.5 3.0
log(XX)
## [1] 1.098612 1.252763 1.386294 1.504077 2.014903 1.704748 1.791759
Os vetores (e outros objetos no R) algumas vezes possuem um terceiro atributo: nomes. Os nomes são muito importantes para as análises filogenéticas.
SVL <- rnorm(15, mean = 10, sd = 1)
sp <- c('Arachne', 'Minotaur', 'Cerberus', 'Medusa',
'Chimera', 'Lamia', 'Sirens', 'Phoenix',
'Python', 'Pegasus', 'Unicorn', 'Sphinx',
'Hydra', 'Harpy', 'Griffin')
names(SVL) <- sp
attributes(SVL)
## $names
## [1] "Arachne" "Minotaur" "Cerberus" "Medusa" "Chimera" "Lamia"
## [7] "Sirens" "Phoenix" "Python" "Pegasus" "Unicorn" "Sphinx"
## [13] "Hydra" "Harpy" "Griffin"
SVL
## Arachne Minotaur Cerberus Medusa Chimera Lamia Sirens
## 10.414992 11.954215 9.286578 10.363953 10.419632 10.456358 10.047626
## Phoenix Python Pegasus Unicorn Sphinx Hydra Harpy
## 10.812628 9.950867 11.000295 10.002505 8.503102 9.241081 9.643092
## Griffin
## 10.944143
As matrizes nada mais são do que vetores em um formato tabular. Por essa razão, há um atributo adicional em razão da dimensão (dim). Vamos criar uma matriz e verificar. Para arranjar por colunas, podemos rodar o seguinte comando:
M <- matrix(1:100, 10, 10)
M
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 1 11 21 31 41 51 61 71 81 91
## [2,] 2 12 22 32 42 52 62 72 82 92
## [3,] 3 13 23 33 43 53 63 73 83 93
## [4,] 4 14 24 34 44 54 64 74 84 94
## [5,] 5 15 25 35 45 55 65 75 85 95
## [6,] 6 16 26 36 46 56 66 76 86 96
## [7,] 7 17 27 37 47 57 67 77 87 97
## [8,] 8 18 28 38 48 58 68 78 88 98
## [9,] 9 19 29 39 49 59 69 79 89 99
## [10,] 10 20 30 40 50 60 70 80 90 100
Outra forma seria (não vamos demonstrar para não tomar muito mais tempo, mas você pode tentar depois). M <- 1:100 dim(M) <- c(10,10)
Mas e se nossa ideia fosse arranjar por linhas, como faríamos? Agora que você já aprendeu a buscar ajuda sobre funções no R, já pode realizar esse desafio sozinho!
M[9,3]
## [1] 29
M[ ,2]
## [1] 11 12 13 14 15 16 17 18 19 20
M[3, ]
## [1] 3 13 23 33 43 53 63 73 83 93
Na matriz que criamos, qual número se encontra na coluna 4, linha 3?
Data frame é o tipo de objeto que geralmente mais utilizamos. Ele é usado para armazenar tabelas de dados. É uma lista de vetores de mesmo tamanho. Vamos olhar o exemplo para entender melhor. Vamos criar um data frame ‘df’ com três vetores.
a <- c(2, 3, 5)
b <- c("aa", "bb", "cc")
c <- c(TRUE, FALSE, TRUE)
df = data.frame(a, b, c)
Podemos acessar os elementos do data frame da mesma forma que na matrix. Vamos usar uma base de dados que já está presente no R (iris)
iris
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5.0 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## 11 5.4 3.7 1.5 0.2 setosa
## 12 4.8 3.4 1.6 0.2 setosa
## 13 4.8 3.0 1.4 0.1 setosa
## 14 4.3 3.0 1.1 0.1 setosa
## 15 5.8 4.0 1.2 0.2 setosa
## 16 5.7 4.4 1.5 0.4 setosa
## 17 5.4 3.9 1.3 0.4 setosa
## 18 5.1 3.5 1.4 0.3 setosa
## 19 5.7 3.8 1.7 0.3 setosa
## 20 5.1 3.8 1.5 0.3 setosa
## 21 5.4 3.4 1.7 0.2 setosa
## 22 5.1 3.7 1.5 0.4 setosa
## 23 4.6 3.6 1.0 0.2 setosa
## 24 5.1 3.3 1.7 0.5 setosa
## 25 4.8 3.4 1.9 0.2 setosa
## 26 5.0 3.0 1.6 0.2 setosa
## 27 5.0 3.4 1.6 0.4 setosa
## 28 5.2 3.5 1.5 0.2 setosa
## 29 5.2 3.4 1.4 0.2 setosa
## 30 4.7 3.2 1.6 0.2 setosa
## 31 4.8 3.1 1.6 0.2 setosa
## 32 5.4 3.4 1.5 0.4 setosa
## 33 5.2 4.1 1.5 0.1 setosa
## 34 5.5 4.2 1.4 0.2 setosa
## 35 4.9 3.1 1.5 0.2 setosa
## 36 5.0 3.2 1.2 0.2 setosa
## 37 5.5 3.5 1.3 0.2 setosa
## 38 4.9 3.6 1.4 0.1 setosa
## 39 4.4 3.0 1.3 0.2 setosa
## 40 5.1 3.4 1.5 0.2 setosa
## 41 5.0 3.5 1.3 0.3 setosa
## 42 4.5 2.3 1.3 0.3 setosa
## 43 4.4 3.2 1.3 0.2 setosa
## 44 5.0 3.5 1.6 0.6 setosa
## 45 5.1 3.8 1.9 0.4 setosa
## 46 4.8 3.0 1.4 0.3 setosa
## 47 5.1 3.8 1.6 0.2 setosa
## 48 4.6 3.2 1.4 0.2 setosa
## 49 5.3 3.7 1.5 0.2 setosa
## 50 5.0 3.3 1.4 0.2 setosa
## 51 7.0 3.2 4.7 1.4 versicolor
## 52 6.4 3.2 4.5 1.5 versicolor
## 53 6.9 3.1 4.9 1.5 versicolor
## 54 5.5 2.3 4.0 1.3 versicolor
## 55 6.5 2.8 4.6 1.5 versicolor
## 56 5.7 2.8 4.5 1.3 versicolor
## 57 6.3 3.3 4.7 1.6 versicolor
## 58 4.9 2.4 3.3 1.0 versicolor
## 59 6.6 2.9 4.6 1.3 versicolor
## 60 5.2 2.7 3.9 1.4 versicolor
## 61 5.0 2.0 3.5 1.0 versicolor
## 62 5.9 3.0 4.2 1.5 versicolor
## 63 6.0 2.2 4.0 1.0 versicolor
## 64 6.1 2.9 4.7 1.4 versicolor
## 65 5.6 2.9 3.6 1.3 versicolor
## 66 6.7 3.1 4.4 1.4 versicolor
## 67 5.6 3.0 4.5 1.5 versicolor
## 68 5.8 2.7 4.1 1.0 versicolor
## 69 6.2 2.2 4.5 1.5 versicolor
## 70 5.6 2.5 3.9 1.1 versicolor
## 71 5.9 3.2 4.8 1.8 versicolor
## 72 6.1 2.8 4.0 1.3 versicolor
## 73 6.3 2.5 4.9 1.5 versicolor
## 74 6.1 2.8 4.7 1.2 versicolor
## 75 6.4 2.9 4.3 1.3 versicolor
## 76 6.6 3.0 4.4 1.4 versicolor
## 77 6.8 2.8 4.8 1.4 versicolor
## 78 6.7 3.0 5.0 1.7 versicolor
## 79 6.0 2.9 4.5 1.5 versicolor
## 80 5.7 2.6 3.5 1.0 versicolor
## 81 5.5 2.4 3.8 1.1 versicolor
## 82 5.5 2.4 3.7 1.0 versicolor
## 83 5.8 2.7 3.9 1.2 versicolor
## 84 6.0 2.7 5.1 1.6 versicolor
## 85 5.4 3.0 4.5 1.5 versicolor
## 86 6.0 3.4 4.5 1.6 versicolor
## 87 6.7 3.1 4.7 1.5 versicolor
## 88 6.3 2.3 4.4 1.3 versicolor
## 89 5.6 3.0 4.1 1.3 versicolor
## 90 5.5 2.5 4.0 1.3 versicolor
## 91 5.5 2.6 4.4 1.2 versicolor
## 92 6.1 3.0 4.6 1.4 versicolor
## 93 5.8 2.6 4.0 1.2 versicolor
## 94 5.0 2.3 3.3 1.0 versicolor
## 95 5.6 2.7 4.2 1.3 versicolor
## 96 5.7 3.0 4.2 1.2 versicolor
## 97 5.7 2.9 4.2 1.3 versicolor
## 98 6.2 2.9 4.3 1.3 versicolor
## 99 5.1 2.5 3.0 1.1 versicolor
## 100 5.7 2.8 4.1 1.3 versicolor
## 101 6.3 3.3 6.0 2.5 virginica
## 102 5.8 2.7 5.1 1.9 virginica
## 103 7.1 3.0 5.9 2.1 virginica
## 104 6.3 2.9 5.6 1.8 virginica
## 105 6.5 3.0 5.8 2.2 virginica
## 106 7.6 3.0 6.6 2.1 virginica
## 107 4.9 2.5 4.5 1.7 virginica
## 108 7.3 2.9 6.3 1.8 virginica
## 109 6.7 2.5 5.8 1.8 virginica
## 110 7.2 3.6 6.1 2.5 virginica
## 111 6.5 3.2 5.1 2.0 virginica
## 112 6.4 2.7 5.3 1.9 virginica
## 113 6.8 3.0 5.5 2.1 virginica
## 114 5.7 2.5 5.0 2.0 virginica
## 115 5.8 2.8 5.1 2.4 virginica
## 116 6.4 3.2 5.3 2.3 virginica
## 117 6.5 3.0 5.5 1.8 virginica
## 118 7.7 3.8 6.7 2.2 virginica
## 119 7.7 2.6 6.9 2.3 virginica
## 120 6.0 2.2 5.0 1.5 virginica
## 121 6.9 3.2 5.7 2.3 virginica
## 122 5.6 2.8 4.9 2.0 virginica
## 123 7.7 2.8 6.7 2.0 virginica
## 124 6.3 2.7 4.9 1.8 virginica
## 125 6.7 3.3 5.7 2.1 virginica
## 126 7.2 3.2 6.0 1.8 virginica
## 127 6.2 2.8 4.8 1.8 virginica
## 128 6.1 3.0 4.9 1.8 virginica
## 129 6.4 2.8 5.6 2.1 virginica
## 130 7.2 3.0 5.8 1.6 virginica
## 131 7.4 2.8 6.1 1.9 virginica
## 132 7.9 3.8 6.4 2.0 virginica
## 133 6.4 2.8 5.6 2.2 virginica
## 134 6.3 2.8 5.1 1.5 virginica
## 135 6.1 2.6 5.6 1.4 virginica
## 136 7.7 3.0 6.1 2.3 virginica
## 137 6.3 3.4 5.6 2.4 virginica
## 138 6.4 3.1 5.5 1.8 virginica
## 139 6.0 3.0 4.8 1.8 virginica
## 140 6.9 3.1 5.4 2.1 virginica
## 141 6.7 3.1 5.6 2.4 virginica
## 142 6.9 3.1 5.1 2.3 virginica
## 143 5.8 2.7 5.1 1.9 virginica
## 144 6.8 3.2 5.9 2.3 virginica
## 145 6.7 3.3 5.7 2.5 virginica
## 146 6.7 3.0 5.2 2.3 virginica
## 147 6.3 2.5 5.0 1.9 virginica
## 148 6.5 3.0 5.2 2.0 virginica
## 149 6.2 3.4 5.4 2.3 virginica
## 150 5.9 3.0 5.1 1.8 virginica
A primeira linha contém os nomes das colunas (variáveis) e é chamada pela programa de ‘header’. Na horizontal estão as linhas de dados, que pode ou não começar com o nome das linhas. Por exemplo, em análises filogenéticas cada linha corresponderia a uma espécie. Cada dado de uma linha é chamada de célula. Para acessar o dado de uma célula, é possível usar as coordenadas de linha e coluna separadas por vírgulas entre colchetes ‘[]’. A exemplo da matriz, a ordem de linha e coluna é importante.
iris[1, 2]
## [1] 3.5
Adicionalmente, podemos usar os nomes das linhas e colunas em vez das coordenadas numéricas. Vamos usar o conjunto de dados mtcars como exemplo.
mtcars
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
mtcars["Mazda RX4", "cyl"]
## [1] 6
Há outra maneira também de acessar apenas uma determinada coluna
iris$Sepal.Width
## [1] 3.5 3.0 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 3.7 3.4 3.0 3.0 4.0 4.4 3.9
## [18] 3.5 3.8 3.8 3.4 3.7 3.6 3.3 3.4 3.0 3.4 3.5 3.4 3.2 3.1 3.4 4.1 4.2
## [35] 3.1 3.2 3.5 3.6 3.0 3.4 3.5 2.3 3.2 3.5 3.8 3.0 3.8 3.2 3.7 3.3 3.2
## [52] 3.2 3.1 2.3 2.8 2.8 3.3 2.4 2.9 2.7 2.0 3.0 2.2 2.9 2.9 3.1 3.0 2.7
## [69] 2.2 2.5 3.2 2.8 2.5 2.8 2.9 3.0 2.8 3.0 2.9 2.6 2.4 2.4 2.7 2.7 3.0
## [86] 3.4 3.1 2.3 3.0 2.5 2.6 3.0 2.6 2.3 2.7 3.0 2.9 2.9 2.5 2.8 3.3 2.7
## [103] 3.0 2.9 3.0 3.0 2.5 2.9 2.5 3.6 3.2 2.7 3.0 2.5 2.8 3.2 3.0 3.8 2.6
## [120] 2.2 3.2 2.8 2.8 2.7 3.3 3.2 2.8 3.0 2.8 3.0 2.8 3.8 2.8 2.8 2.6 3.0
## [137] 3.4 3.1 3.0 3.1 3.1 3.1 2.7 3.2 3.3 3.0 2.5 3.0 3.4 3.0
E se for conveniente, separá-la em um vetor.
SW <- iris$Sepal.Width
É o tipo mais geral de estrutura de dados. Consiste em uma coleção ordenada de outros objetos (componentes). Não é necessário que o componente seja do mesmo tipo, podendo por exemplo consitir de uma matrix, um vetor, uma função e também uma árvore filogenética. Vamos ver a estrutura de uma árvore:
require(phytools)
set.seed(1)
tree<-pbtree(b=1,d=0.2,n=30)
plotTree(tree)