Visão geral do sistema de tipos de R
Entenda os tipos double, integer, character, logical e complex.
Visão geral do sistema de tipos de R é uma aula grátis de R Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de R Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de R Academy inclui 4 aulas no total.
Sistema de Tipos do R
O R tem um sistema de tipos avançado. Cada objeto tem uma class (categoria de alto nível) e um tipo (modo de armazenamento de baixo nível). Entender ambos ajuda você a escrever código correto e eficiente e a depurar erros relacionados a tipos.
# Check class and type of various objects
cat('class(42L) :', class(42L), '
')
cat('typeof(42L) :', typeof(42L), '
')
cat('class(3.14) :', class(3.14), '
')
cat('typeof(3.14) :', typeof(3.14), '
')
cat('class(TRUE) :', class(TRUE), '
')
cat('class("hello"):', class('hello'), '
')class() vs typeof()
class(x) retorna a categoria de alto nível usada pelo sistema orientado a objetos do R (por exemplo, 'integer', 'numeric', 'matrix'). typeof(x) retorna o tipo de armazenamento de baixo nível em C (por exemplo, 'integer', 'double', 'closure').
m <- matrix(1:4, nrow = 2)
cat('class(matrix) :', class(m), '
') # matrix array
cat('typeof(matrix) :', typeof(m), '
') # integer
f <- factor(c('a', 'b', 'a'))
cat('class(factor) :', class(f), '
') # factor
cat('typeof(factor) :', typeof(f), '
') # integer (stored as int!)
cat('class(list) :', class(list()), '
') # list
cat('typeof(list) :', typeof(list()), '
') # listis.numeric() — Verificação Numérica
is.numeric(x) retorna TRUE tanto para valores integer quanto para valores double (e matrizes numéricas). Essa função verifica o supertipo numérico, não o modo de armazenamento específico.
cat('is.numeric(3.14):', is.numeric(3.14), '
') # TRUE (double)
cat('is.numeric(3L): ', is.numeric(3L), '
') # TRUE (integer)
cat('is.numeric(TRUE):', is.numeric(TRUE), '
') # FALSE
cat('is.numeric("3"): ', is.numeric('3'), '
') # FALSE
cat('is.numeric(NA): ', is.numeric(NA), '
') # FALSE (NA is logical)is.integer() vs is.double()
is.integer() verifica especificamente o armazenamento inteiro (criado com o sufixo L ou com as.integer()). is.double() verifica o armazenamento de ponto flutuante (double). Ambos são subconjuntos de numeric.
x_int <- 5L
x_dbl <- 5.0
cat('--- x_int = 5L ---
')
cat('is.integer:', is.integer(x_int), '
') # TRUE
cat('is.double: ', is.double(x_int), '
') # FALSE
cat('is.numeric:', is.numeric(x_int), '
') # TRUE
cat('--- x_dbl = 5.0 ---
')
cat('is.integer:', is.integer(x_dbl), '
') # FALSE
cat('is.double: ', is.double(x_dbl), '
') # TRUE
cat('is.numeric:', is.numeric(x_dbl), '
') # TRUEis.character() — Verificação de Texto
is.character(x) retorna TRUE se x for um vetor de caracteres (texto). Use essa função para validar entradas que devem ser texto ou para distinguir tipos NA numéricos de tipos NA de caracteres.
greetings <- c('hello', 'world', 'R')
numbers <- c(1, 2, 3)
numeric_string <- '42'
cat('is.character(greetings): ', is.character(greetings), '
')
cat('is.character(numbers): ', is.character(numbers), '
')
cat('is.character(numeric_string): ', is.character(numeric_string), '
')
cat('is.character(NA_character_): ', is.character(NA_character_), '
')is.logical() — Verificação Booleana
is.logical(x) retorna TRUE se x contiver valores lógicos (booleanos). Observe que NA sem tipo explícito é, por padrão, um valor lógico.
flags <- c(TRUE, FALSE, TRUE, NA)
cat('is.logical(flags): ', is.logical(flags), '
') # TRUE
cat('is.logical(NA): ', is.logical(NA), '
') # TRUE (default NA is logical)
cat('is.logical(1): ', is.logical(1), '
') # FALSE
cat('is.logical("TRUE"):', is.logical('TRUE'), '
') # FALSE
cat('typeof(NA): ', typeof(NA), '
') # logicalHierarquia de Tipos do R
Os tipos atômicos do R formam uma hierarquia, do mais simples ao mais complexo: logical < integer < double < complex < character. Ao misturar tipos em um vetor, o R converte todos os elementos para o tipo mais complexo presente.
# Type hierarchy in action
cat('c(TRUE, 1L) type: ', typeof(c(TRUE, 1L)), '
') # integer
cat('c(1L, 1.5) type: ', typeof(c(1L, 1.5)), '
') # double
cat('c(1.5, 1+0i) type: ', typeof(c(1.5, 1+0i)), '
') # complex
cat('c(1+0i, "a") type: ', typeof(c(1+0i, 'a')), '
') # character
cat('c(TRUE, "x") type: ', typeof(c(TRUE, 'x')), '
') # characterInspeção Programática de Tipos
Você pode escrever funções de inspeção de tipos para auditar uma lista de objetos. Combinar class(), typeof() e length() fornece um resumo abrangente da estrutura de qualquer objeto.
describe_type <- function(x, label) {
cat(label, ': class =', class(x), ', typeof =', typeof(x),
', length =', length(x), '
')
}
describe_type(42L, 'integer literal')
describe_type(3.14, 'double literal')
describe_type(TRUE, 'logical')
describe_type('hello', 'character')
describe_type(c(1,2,3), 'numeric vector')
describe_type(list(1,'a'), 'list')storage.mode() e mode()
storage.mode(x) é semelhante a typeof(x), mas usa a convenção de nomenclatura S3 (por exemplo, retorna 'double' em vez de 'double'). mode(x) retorna um agrupamento um pouco mais amplo, reunindo integer e double como 'numeric'.
x_int <- 5L
x_dbl <- 5.0
cat('mode(5L): ', mode(x_int), '
') # numeric
cat('mode(5.0): ', mode(x_dbl), '
') # numeric
cat('storage.mode(5L): ', storage.mode(x_int), '
') # integer
cat('storage.mode(5.0):', storage.mode(x_dbl), '
') # double
# mode() lumps int+dbl; storage.mode() / typeof() distinguish themInspeção de Tipos para Listas e Quadros de Dados
Para objetos mais complexos, como listas e quadros de dados, sapply(df, class) aplica class() a cada coluna, fornecendo um vetor nomeado com os tipos das colunas — uma maneira rápida de auditar o esquema de um quadro de dados.
df <- data.frame(
id = 1:3,
name = c('Alice', 'Bob', 'Carol'),
score = c(88.5, 79.0, 92.3),
passed = c(TRUE, TRUE, TRUE)
)
cat('Column types:
')
print(sapply(df, class))
cat('Column typeof:
')
print(sapply(df, typeof))Resumo do Sistema de Tipos
Aqui está uma referência rápida às ferramentas de inspeção de tipos do R:
class(x)— nome da classe S3 de alto níveltypeof(x)— tipo de armazenamento C de baixo nívelis.numeric(x)— TRUE para integer ou doubleis.integer(x)— TRUE apenas para armazenamento integeris.double(x)— TRUE apenas para double (ponto flutuante)is.character(x)— TRUE para textosis.logical(x)— TRUE para TRUE/FALSE/NA
x <- 42L
cat('class(42L): ', class(x), '
')
cat('typeof(42L): ', typeof(x), '
')
cat('is.numeric(42L): ', is.numeric(x), '
')
cat('is.integer(42L): ', is.integer(x), '
')
cat('is.double(42L): ', is.double(x), '
')
cat('is.character(42L):', is.character(x), '
')Verificação Rápida
O que is.numeric(5L) retorna no R?
Recapitulação: Sistema de Tipos do R
Ótimo trabalho! Principais aprendizados desta lição:
class(x)retorna o tipo de alto nível;typeof(x)retorna o tipo de armazenamento de baixo nívelis.numeric()é TRUE tanto para inteiros quanto para doublesis.integer()eis.double()distinguem os dois subtipos numéricos- Hierarquia de tipos do R (baixo → alto): logical → integer → double → complex → character
- Misturar tipos em um vetor aciona a conversão automática para o tipo mais alto
sapply(df, class)audita todos os tipos de coluna em um quadro de dados
# Type audit function
audit_types <- function(x, name = 'x') {
cat(name, ': class=', class(x), ', typeof=', typeof(x),
', is.numeric=', is.numeric(x), '
')
}
audit_types(1L, 'integer')
audit_types(1.0, 'double')
audit_types(TRUE, 'logical')
audit_types('hello', 'character')
audit_types(1+2i, 'complex')Perguntas Frequentes
A aula “Visão geral do sistema de tipos de R” é grátis?
Sim — o texto completo de “Visão geral do sistema de tipos de R” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de R Academy, atualize para CoddyKit PRO. O curso de R Academy inclui 4 aulas no total.
O que vou aprender em “Visão geral do sistema de tipos de R”?
Entenda os tipos double, integer, character, logical e complex. Você pratica R Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar R Academy?
Nenhuma experiência prévia é necessária. R Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Visão geral do sistema de tipos de R”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de R Academy?
Sim. Cada aula de R Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Visão geral do sistema de tipos de R
- Convertendo entre tipos numéricos
- Conversão lógica e de caracteres
- Armadilhas e boas práticas de coerção