Sie sind auf Seite 1von 19

Introdução ao uso do software R

Moysés Nascimento1

1. Fundamentos da Linguagem R

1.1.Objetos do R

O R é uma linguagem baseada em objetos, ou seja, tudo que nós vamos usar no R
é armazenado na memória do computador sob a forma de um objeto. Todos os objetos
em R têm um nome associado e podem armazenar diferentes formatos, como por exemplo
números, textos, vetores, matrizes, etc. Para atribuir algo a um objeto do R, os operadores
“<-“ e “=” podem ser utilizados.

Exemplo: Deseja-se armazenar o número 60,5 em um objeto chamado peso.


peso = 60.5
peso
[1] 60.5

ou
peso <- 60.5
peso
[1] 60.5

O símbolo [1] indica que o primeiro elemento da linha é o número 1 do conjunto


de observações.

Observação: Se atribuirmos um novo valor a um objeto já existente perderemos o


conteúdo que ele estava a armazenar anteriormente.
É também possível atribuir expressões numéricas a objetos. O resultado de tal
operação é o resultado do cálculo da expressão, e é armazenado no objeto, e não a
expressão propriamente dita.
Exemplo:

1
Professor Adjunto IV, DET – UFV, CCE, Gabinete 312B. Telefone: 3899-1784. E-mail:
moysesnascim@ufv.br

1
a <- 5
z <- a^2
z
[1] 25

Para listar os objetos contidos na memória do computador pode-se fazer uso das
funções ls() ou objects(). Se o interesse é apagar algum objeto da memória usamos a
função rm() como nos exemplos apresentado sem seguida,

ls()
[1] "a""peso" "x" "z"

ou

objects()
[1] "a""peso" "x" "z"

Como resultado da função ls() observa-se os objetos que estão armazenados na memória
do R. Para remover, por exemplo, o objeto peso da memória do R, tem-se,

rm(peso)
ls()
[1] "a" "x" "z"

Observação: O nome dos objetos pode ser formado por qualquer letra maiúscula ou
minúscula, dígitos 0 a 9 (exceto no início do nome), e também o ponto final “.”. Os nomes
dos objetos em R são sensíveis às letras maiúsculas / minúsculas, ou seja, est e Est são
dois objetos diferentes para o R. Além disso, não se podem usar espaços nos nomes dos
objetos.

1.2.Vetores
Os vetores são estruturas que permitem armazenar um conjunto de valores do
mesmo tipo (por exemplo, números) sob um mesmo nome. Esses elementos podem
depois ser acessados individualmente usando um esquema de indexação (visto a frente).
No R, mesmo quando atribuímos um único número a um objeto (por exemplo,
fazendo x <-45), estamos de fato criando um vetor de números com um único elemento.
Todos os vetores em R têm um modo e um tamanho. O modo determina o tipo de
valores guardado no vetor (character: conjuntos de caracteres; logical: valores lógicos (F
ou T ou FALSE ou TRUE); numeric: números inteiros ou reais; complex: números

2
complexos). O tamanho de um vetor é o número de elementos que ele contém, e pode ser
obtido com a função length().
Para criar vetores usaremos função c() para indicar ao R os elementos que formam
o vetor separando-os por vírgulas.
peso <- c(60.5,70,69.8,101.20)
peso
[1]60.5 70.0 69.8 101.2
length(peso)
[1] 4
mode(peso)
[1] "numeric"

Observação: Todos os elementos de um vetor têm que ser do mesmo tipo (modo). Caso
tentemos criar um vetor com elementos de tipo diferente o R vai forçá-los a ser do mesmo
tipo. Considere o seguinte exemplo:
peso <- c(60.5,70,69.8,101.20,"fat")
peso
[1] "60.5""70" "69.8" "101.2" "fat"
mode(peso)
[1] "character"

Após a coerção, todos os elementos do vetor são strings2 não podendo ser
utilizados em uma expressão numérica.
Os vetores podem ter um elemento especial que é o NA (not avaliable), o qual
representa um valor desconhecido (dados perdido).
peso <- c(60.5,70,69.8,101.20,NA)
peso
[1]60.5 70.0 69.8 101.2 NA

Podemos acessar um número do vetor escrevendo o nome do vetor e a ordem do


elemento de interesse entre colchetes. Por exemplo, o interesse reside no terceiro
elemento do vetor:
peso[3]
[1] 69.8

Usando esta forma de acessar os elementos individuais podemos alterar o


conteúdo de um elemento particular do vetor. Por exemplo, o elemento presente no
terceiro elemento do vetor deve ser alterado para 50,

2
Conjuntos de caracteres englobados por aspas.

3
peso[3] <- 50
peso
[1]60.5 70.0 50.0 10 1.2 NA

1.3.Operação com Vetores


No R quando uma função matemática é aplicada a um vetor produz como
resultado um vetor de resultados, que é obtido aplicando a função a cada um dos
elementos do vetor. Como exemplo, considere o uso da função sqrt(), que serve para
calcular raízes quadradas, ao vetor abaixo
x<-c(4,9,16,25,36,49)
z<-sqrt(x)
z
[1] 2 3 4 5 6 7

A seguir é apresentada a soma de vetores e exemplos de utilização da mesma.


Deve-se ficar claro que as propriedades são válidas para as outras operações.
a<-c(1,2,3,4,5)
b<-c(5,4,3,2,1)
c<-a+b
c
[1] 6 6 6 6 6

Observação: Em operações envolvendo vetores de tamanhos diferentes, quando o


tamanho do vetor menor é múltiplo do maior, o R usa uma regra denominada reciclagem
dos valores, ou seja, aumenta-se o menor vetor até atingir o tamanho do maior. Caso
contrário, ou seja, quando o tamanho do vetor menor não é múltiplo do maior o R imprime
um aviso na tela. Para exemplificar, considere os comandos abaixo.

 Tamanho do vetor menor é múltiplo do maior


d<-c(10,10,10,10)
e<-c(20,20)
f<-d+e
f
[1] 30 30 30 30

 Tamanho do vetor menor não é múltiplo do maior


d<-c(10,10,10,10)
e<-c(20,20,20)
f<-d+e
Mensagens de aviso perdidas:

4
In d + e :
comprimento do objeto maior não é múltiplo do comprimento do objeto menor

1.4.Matrizes

Em R, as matrizes podem ser vistas como vetores com uma propriedade especial que
é a dimensão. Suponha que temos oito números que correspondem as produções, em kg,
de 2 genótipos em 4 ambientes.
produção < - c(10,14,9,23,42,11,23,54)
produção
[1] 10 14 9 23 42 11 23 54
dim(produção) <- c(2, 4)
produção
[,1] [,2] [,3] [,4]
[1,] 10 9 42 23
[2,] 14 23 11 54

Observe que a função dim() foi utilizada para transformar o objeto vetor produção
em um novo objeto caracterizado por uma matriz de duas linhas e quatro colunas. Outra
maneira de estabelecer um objeto matriz no R é por meio da função matrix().
produção <- matrix(c(10,14,9,23,42,11,23,54), 2, 4, byrow = T)
produção
[,1] [,2] [,3] [,4]
[1,] 10 14 9 23
[2,] 42 11 23 54

O preenchimento da matriz pode ser realizado por linha, usando o argumento


byrow = T ou por coluna usando byrow = F.
produção <- matrix(c(10,14,9,23,42,11,23,54), 2, 4, byrow = F)
produção
[,1] [,2] [,3] [,4]
[1,] 10 9 42 23
[2,] 14 23 11 54

O R permite atribuir nomes aos elementos. Para tanto, basta especificar os nomes
em relação às linhas e colunas, como apresentado a seguir
rownames(produção) <- c("UFV1","UFV2")
colnames(produção) <- c("Viçosa","Coimbra","Paula Cândido","Ervália")
produção
Viçosa Coimbra Paula Cândido Ervália
UFV1 10 9 42 23

5
UFV2 14 23 11 54

Da mesma forma que em vetores é possível acessar tanto elementos individuais


quanto elementos pertencentes a submatrizes usando índices de interesse. Considere os
exemplos abaixo:
 Acessando o valores referente ao genótipo UFV1 em Viçosa
produção["UFV1","Viçosa"]
[1] 10

 Acessando o elemento da primeira linha e coluna

produção[1,1]
[1] 10

 Acessando os elementos da primeira linha e das colunas 1 e 2.

produção[1,1:2]
Viçosa Coimbra
10 9

Se uma das dimensões for omitida obtemos todos os elementos referente ao índice
omitido.
 Acessando todos elementos da coluna quatro
produção[,4]
UFV1 UFV2
23 54

 Acessando todos os elementos da linha um

produção[1,]
Viçosa Coimbra Paula Cândido Ervália
10 9 42 23

Outra operação interessante que o R permite é juntar dois ou mais vetores ou


matrizes, por colunas e linhas. Para tanto, podem ser utilizadas, respectivamente, as
funções cbind() e rbind().
m1 <- matrix(c(45, 23, 66, 77, 33, 44, 56, 12, 78, 23), 2, 5)
m1
[,1] [,2] [,3] [,4] [,5]
[1,] 45 66 33 56 78
[2,] 23 77 44 12 23
cbind(c(4, 76), m1[, 4])

6
[,1] [,2]
[1,] 4 56
[2,] 76 12

m2 <- matrix(rep(10, 15), 10, 3)


m2
[,1] [,2] [,3] [,4] [,5]
[1,] 10 10 10 10 10
[2,] 10 10 10 10 10
[3,] 10 10 10 10 10
m3 <- rbind(m1[1, ], m2[2, ])
m3
[,1] [,2] [,3] [,4] [,5]
[1,] 45 66 33 56 78
[2,] 10 10 10 10 10

1.5.Operações com Matrizes

A seguir serão apresentadas diversas operações com matrizes. A primeira a ser


apresentada é a multiplicação de uma matriz por um escalar, ou seja:
A<-matrix(c(1,2,4,3),2,2,byrow=T)
A
[,1] [,2]
[1,] 1 2
[2,] 4 3
c=2
B<-c*A
B
[,1] [,2]
[1,] 2 4
[2,] 8 6

As operações de adição e subtração de matrizes também podem ser realizadas.


A<-matrix(c(1,2,4,3),2,2,byrow=T)
A
[,1] [,2]
[1,] 1 2
[2,] 4 3
B<-matrix(c(2,0,0,3),2,2,byrow=T)
B
[,1] [,2]
[1,] 2 0
[2,] 0 3
C<-A+B
C
[,1] [,2]
[1,] 3 2
[2,] 4 6

7
Tais operações são possíveis apenas quando as dimensões das matrizes a serem
somadas ou subtraídas são iguais, ou seja, dadas as matrizes A(m x n) e B(r x s) a soma
ou subtração é possível se, e somente se, m = r e n = s.
O produto de duas matrizes é realizado por meio do produto interno do vetor
formado a partir de cada linha da matriz que pré-multiplica em relação aos vetores
formados a partir de cada coluna da matriz que pós-multiplica. Desta forma, para que a
operação seja possível é necessário que a matriz que pré-multiplica tenha tantas colunas
quando o número de linhas da matriz que pós-multiplica.
A<-matrix(c(1,2,4,3),2,2,byrow=T)
A
[,1] [,2]
[1,] 1 2
[2,] 4 3
B<-matrix(c(2,0,0,3),2,2,byrow=T)
B
[,1] [,2]
[1,] 2 0
[2,] 0 3
C<-A%*%B
C
[,1] [,2]
[1,] 2 6
[2,] 8 9

O produto de Kronecker ou produto direto (  ) de duas matrizes é realizado da


seguinte maneira:
A<-matrix(c(1,2,4,3),2,2,byrow=T)
A
[,1] [,2]
[1,] 1 2
[2,] 4 3
B<-matrix(c(2,0,0,3),2,2,byrow=T)
B
[,1] [,2]
[1,] 2 0
[2,] 0 3
C<-A%x%B
C
[,1] [,2] [,3] [,4]
[1,] 2 0 4 0
[2,] 0 3 0 6

8
[3,] 8 0 6 0
[4,] 0 12 0 9

Ou seja, cada elemento da matriz de pré-multiplica, multiplica toda a matriz que


pós-multiplica. O produto de kronecker pode também ser obtido por meio da função
kronecker(A,B).
kronecker(A,B)
[,1] [,2] [,3] [,4]
[1,] 2 0 4 0
[2,] 0 3 0 6
[3,] 8 0 6 0
[4,] 0 12 0 9

Podemos também efetuar o produto de Hadamard (  ) ou Produto Elemento por


Elemento.
A<-matrix(c(1,2,4,3),2,2,byrow=T)
A
[,1] [,2]
[1,] 1 2
[2,] 4 3
B<-matrix(c(2,0,0,3),2,2,byrow=T)
B
[,1] [,2]
[1,] 2 0
[2,] 0 3
C <- A*B
C
[,1] [,2]
[1,] 2 0
[2,] 0 9

Além dessas operações podemos citar a soma direta entre duas matrizes (  ):
install.packages("Matrix")
library(matrix)
A<-matrix(c(1,2,4,3),2,2,byrow=T)
A
B<-matrix(c(2,0,0,3),2,2,byrow=T)
B
C<-bdiag(A,B)
C

9
Observação: Ordem das operações matriciais: i) parênteses, colchetes e chaves; ii)
multiplicação por escalar ou matrizes; iii) produto de Kronecker ou Hadamard; iv)
adição e subtração; v) soma direta.

1.6.Sequências

A geração de sequências no R pode ser feita de diversas formas, são elas:


i. Por meio do operador “:” para gerar sequências de números inteiros. Como
por exemplo, criar um vetor com os números de 1 a 10.
x<-1:10
x
[1]1 2 3 4 5 6 7 8 9 10

ii. Gerar sequências descendentes


z<-5:0
z
[1] 5 4 3 2 1 0

iii. Por meio da função seq() para gerar sequências de número reais. Como
por exemplo, gerar uma sequência formada pelos números começando em
-4 até 1 de 0.5 em 0.5.
seq(-4, 1, 0.5)
[1] -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.50.0 0.5 1.0

Observação: Esta função tem várias outras possibilidades. Para explorá-las, usamos a
ajuda do R digitamos o comando ?seq que mostra o help (ajuda) relativo á função seq().

iv. Por meio da função rep() para gerar sequências de números repetidos.
Considera a geração de uma sequência formada por 10 números iguais a
5.
rep(5, 10)
5 5 5 5 5 5 5 5 5

v. Podemos também gerar uma sequência envolvendo fatores por meio da


função gl(k,n) em que k é o número de níveis do fator e n o número de
repetições de cada nível. Por exemplo, podemos gerar uma sequência
formada 3 níveis com 5 repetições:
gl(3, 5)
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Levels: 1 2 3

10
Outro exemplo seria gerar uma sequência formada 2 níveis (sim e não)
cada um com 5 repetições.
gl(2, 5, labels = c("nao", "sim"))
[1] não não não não nao sim sim sim sim sim
Levels: nao sim

vi. Gerar sequências de acordo com distribuições de distribuição de


probabilidade. Para tanto podemos usar funções disponíveis no R. Essas
funções têm a forma genérica rfunc(n, par1, par2, ...), em que n é o número
de dados a gerar, e par1, par2, ..., são valores de alguns parâmetros que a
função específica a ser usada possa precisar. Considera como exemplo a
geração de sequência de 10 observações de um normal com média 10 e
desvio padrão 5.
a<-rnorm(10,mean=10,sd=5)
a
[1] 4.924833 11.301003 5.383688 16.300269 6.256069 7.037776
13.427369 [8] 11.599768 12.086594 9.100622 12

A seguir uma lista contendo as funções para a geração de sequências de algumas


das principais distribuições de probabilidade.
 rbeta (for the beta random variable)
 rbinom (for the binomial random variable)
 rexp (for the exponential random variable)
 rf (for the F random variable)
 rgamma (for the gamma random variable)
 rgeom (for the geometric random variable)
 rhyper (for the hypergeometric random variable)
 rlnorm (for the lognormal random variable)
 rlogis (for the logistic random variable)
 rmvbin (for the multivariate binary random variable)
 rnbinom (for the negative binomial random variable)
 rmvnorm (for the multivariate normal random variable)
 rnorm (for the normal random variable)
 rpois (for the Poisson random variable)
 rweibull (for the weibull random variable)
 runif (for the uniform random variable)

11
1.7.Indexação

O R permite usar vetores dentro dos colchetes que indicam o elemento do vetor.
Estes vetores se chamam vetores de índices. Um tipo de vetor, já discutido anteriormente
é denominado vetor lógico. Esses são resultado da avaliação de uma condição em relação
a cada elemento do vetor. Como por exemplo:
x<-c(-20,3,-4,35,50)
x
[1] -20 3 -4 35 50
x>0
[1] FALSE TRUE FALSE TRUE TRUE

Podemos guardar este vetor lógico em um objeto z e utilizar esse vetor como um
vetor de índices obtendo então os elementos de x que são maiores que zero.
z<-x>0
z
[1] FALSE TRUE FALSE TRUE TRUE
x[z]
[1] 3 35 50

Ou, podemos fazer simplesmente:

x[x>0]
[1] 3 35 50

Por meio de operadores lógicos disponíveis no R, tais como “|”3 e “&’ que
correspondem à disjunção (OU) e conjunção (E), respectivamente, podemos construir
vetores de indexação lógicos mais complexos, como por exemplo:
x
[1] -203 -4 35 50
x[x<=-20|x>35]
[1] -20 50

Essa instrução fornece como resultado os elementos de x que são menores ou

iguais a -20, ou maiores do que 35.

x[x >0 & x < 40]

[1] 3 35

3
Existem variantes “| |” e “&&’ que também correspondem à disjunção (OU) e conjunção (E),
porém com algumas diferenças que serão abordadas posteriormente.

12
Essa instrução fornece como resultado os elementos de x que são maiores que 0
e menores que 40.
Podemos também usar um vetor de números inteiros como índice de outro vetor.
Os números desse vetor de índices correspondem aos elementos a extrair do outro vetor.
Por exemplo:

v<-c("um","dois","três","quatro","cinco","seis")

[1] "um" "dois" "três" "quatro" "cinco" "seis"

v[c(2,4)]

[1] "dois" "quatro"

v[1:3]

[1] "um" "dois" "três"

Se usarmos um vetor com números negativos, indicamos os elementos que serão


extraídos do vetor:
v[-c(1:3,5)]

[1] "quatro" "seis"

Podemos indexar o vetor com strings por meio da função names(). Se tivermos
um vetor com as produções, em toneladas, de três estados brasileiros podemos criar um
vetor com nomes da seguinte forma:
produçao<-c(40,30,25)

names(produçao)<-c("Minas Gerais","Bahia","Pará")

produçao

Minas Gerais Bahia Pará

40 30 25

1.8.Fatores

Os fatores proporcionam uma forma fácil e compacta de lidar com dados


categóricos (ou nominais). Suponhamos que pretendemos guardar a raça de 4 animais em
um vetor.
r <- c("pial","comercial","pial","comercial","pial)

13
r

[1] "pial" "comercial" "pial" "comercial"

Para transformar um vetor de caracteres em um fator utilizamos a função factor()

r<-factor(r)

[1] pial comercial pial comercial

Levels: comercial pial

Suponha agora que temos 2 novos animais, cuja raça também pretendemos
armazenar. Imagine que por coincidência todos pertencem à raça pial. Se pretendemos
que o fator resultante mantenha os 2 níveis possíveis para a raça de um animal teremos
que fazer,
outro.r<- factor(c("pial", "pial"), levels = c("pial", "comercial"))

utro.r

[1] pial pial

Levels: pial comercial

Para contar o número de ocorrências de cada nível usamos o comando table()


table(r)

comercial pial

2 2

A função table() também permite tabulações cruzadas de dois fatores, desde que
estes tenham o mesmo tamanho. Imaginemos que temos outro vetor referente à idade dos
animais. Podemos construir uma tabela cruzada da idade e da raça dos 10 animais, da
seguinte forma:
idade<-factor(c("adulto", "adulto", "jovem", "jovem))

idade

[1] adulto adulto jovem jovem

Levels: adulto jovem

[1] pial comercial pial comercial Levels: comercial pial

table(r,idade)

14
idade

r adulto jovem

comercial 1 1

pial 1 1

Para a obtenção das frequências marginais usamos o comando margin.table()

tabela.cruzada<- table(r,idade)

margin.table(tabela.cruzada, 1)

comercial pial

2 2

O número 1 indica que pretendemos os totais por linha da tabela cruzada. Se


usássemos o número 2 seriam obtidos os totais por coluna.
Para a obtenção das frequências relativas em relação ao total usamos o comando
prop.table()
prop.table(tabela.cruzada)

idade

r adulto jovem

comercial 0.250 0.250

pial 0.250 0.250

Para a obtenção das frequências relativas em relação ao total por linha fazemos:
prop.table(tabela.cruzada, 1)

idade

r adulto jovem

comercial 0.50 0.50

pial 0.50 0.50

Para a obtenção das frequências relativas em relação ao total por colunas basta
alterar na função anterior o número 1 por 2.

1.9. Arrays

15
São extensões das matrizes, ou seja, objetos que podem ter vários índices. A
criação de um array pode ser realizado por da função array(). Exemplo:
array<-array(1:30, dim= c(2, 5, 3))

array

, , 1

[,1] [,2] [,3] [,4] [,5]

[1,] 1 3 5 7 9

[2,] 2 4 6 8 10

, , 2

[,1] [,2] [,3] [,4] [,5]

[1,] 11 13 15 17 19

[2,] 12 14 16 18 20

, , 3

[,1] [,2] [,3] [,4] [,5]

[1,] 21 23 25 27 29

[2,] 22 24 26 28 30

Os esquemas usuais de indexação que vimos para vetores e matrizes podem


também ser aplicados aos arrays. Como por exemplo:
array[,,2]

[,1] [,2] [,3] [,4] [,5]

[1,] 11 13 15 17 19

[2,] 12 14 16 18 20

1.10. Listas

Podemos armazenar os objetos em uma lista e estes não necessitam ser do mesmo
tipo, modo ou tamanho. Os componentes de uma lista em R são sempre numerados e
podem também ter um nome associados a eles (exemplo: saídas de funções do R).
Vejamos um exemplo de criação de uma lista em R:
estudante <- list(matricula = 34453, nome = "Zezinho", notas = c(20,15,40))

estudante

16
$matricula

[1] 34453

$nome

[1] "Zezinho"

$notas

[1] 20 15 40

Podemos extrair componentes específicos de uma lista por meio da seguinte


sintaxe,
estudante[[1]]

[1] 34453

estudante[[2]]

[1] "Zezinho"

ou

estudante$nome

[1] "Zezinho"

As listas podem ser estendidas acrescentando-lhes novos componentes da seguinte


forma
estudante$pais <- c("Ana Castro", "Miguel Silva")

estudante

$matricula

[1] 34453

$nome

[1] "Zezinho"

$notas

[1] 20 15 40

$pais

[1] "Ana Castro" "Miguel Silva"

1.11. Data Frames

Data frames são objetos utilizados para armazenar tabelas. Diferentemente de


uma matriz, estes podem conter diferentes tipos de dados. Podemos criar uma data frame
da seguinte forma:

17
notas.inform <- data.frame(mat = c(2355, 3456, 2334, 5456),

turma = c("t1", "t2", "t3", "t4"), notas = c(10.3, 9.3,14.2, 15))

notas.inform

mat turma notas

1 2355 t1 10.3

2 3456 t2 9.3

3 2334 t3 14.2

4 5456 t4 15.0

Podemos acessar elementos do uma data frame da mesma forma que em matrizes.
Adicionalmente, as colunas da data frame podem ser acessadas na sua totalidade usando
o seu nome,
notas.inform[2, 2]

[1] t2

Levels: t1 t2 t3 t4

Note que a função data.frame() transformou a coluna turma num fator. Isto é feito
sempre que os elementos de uma coluna sejam todos do tipo string.
Usando os esquemas de indexação podemos fazer consultas aos dados guardados
numa data frame. Exemplos:
notas.inform[notas.inform$notas > 10, ]

mat turma notas

1 2355 t1 10.3

3 2334 t3 14.2

4 5456 t4 15.0

notas.inform[notas.inform$notas > 14, "mat"]

[1] 2334 5456

As consultas a data frames apresentadas acima, podem ser simplificadas por meio
do uso da função attach(). Esta função permite acessar os valores nas colunas de uma data
frame sem a necessidade de colocar o nome deste atrás do nome da coluna, como feito
nos exemplos acima. Vejamos como isto funciona,

attach(notas.inform)

18
notas.inform[notas > 14, ]

mat turma notas

3 2334 t3 14.2

4 5456 t4 15.0

turma

[1] t1 t2 t3 t4

Levels: t1 t2 t3 t4

Devemos usar a função detach() quando não precisamos mais deste acesso
“direto” `as colunas.

detach(notas.inform)

turma

Erro: objeto 'turma' não encontrado

Observação: Da mesma forma que em listas, podemos também acrescentar novas


colunas a uma data frame.

Em geral não vamos escrever os dados numa data frame “`a mão” usando a função
data.frame(), como feito anteriormente. Na maioria das vezes buscamos os dados ou a
uma base de dados, ou em um ficheiro de texto, ou mesmo a uma fonte de dados
disponível na Internet.

19

Das könnte Ihnen auch gefallen