Track
40 perguntas e respostas de entrevistas sobre programação em R para todos os níveis
Estar bem preparado para uma entrevista sobre programação em R é um fator crucial para que você seja bem-sucedido nela. Na prática, esse sucesso tem dois lados: para um candidato a emprego, significa ser contratado pela empresa, enquanto para a empresa em si, significa encontrar a pessoa ideal para o cargo.
Para aumentar as chances de sucesso em uma entrevista sobre R, é sempre bom saber com antecedência quais perguntas podem ser feitas a você, caso esteja procurando emprego, ou quais perguntas você pode fazer a um candidato, caso seja um gerente de contratação ou um recrutador.
Este artigo aborda 40 perguntas fundamentais de entrevistas sobre programação em R e suas respostas para todos os níveis de experiência, além de algumas perguntas gerais de entrevistas. Por conveniência, todas as perguntas técnicas são divididas em três níveis: perguntas de nível básico, intermediário e avançado.
Como recursos complementares para a preparação de sua entrevista sobre programação em R, considere os seguintes recursos úteis:
- Treino para perguntas de entrevistas sobre estatística em R
- Preparação para entrevistas sobre ciência de dados
- 21 perguntas importantes de entrevistas com cientistas de dados
Perguntas gerais de entrevistas sobre programação em R
No início de uma entrevista sobre R, o entrevistador pode fazer ao candidato algumas perguntas gerais e não técnicas sobre sua experiência geral com o R. Por exemplo:
- Há quanto tempo você trabalha com o R?
- Que tipo de tarefas você executa em R?
- Como você avalia seu nível de proficiência em R?
Se você está procurando emprego, deve pensar com antecedência sobre essas e outras perguntas semelhantes e preparar suas respostas. Não se preocupe se ainda não tiver experiência profissional com R: está tudo bem se você descrever seu estágio em programação em R ou seus projetos individuais ou em grupo em R que você concluiu durante os estudos.
Além disso, se você está sendo entrevistado para um cargo de nível básico, seu entrevistador nem sempre espera que tenha experiência profissional com R. Lembre-se de que, como você foi chamado para a entrevista, a empresa achou seu currículo atraente por algum motivo.
Perguntas de entrevistas sobre programação em R de nível básico
Vamos começar com algumas perguntas básicas de entrevistas técnicas sobre R que você pode encontrar com seu possível empregador. Elas exigem que você tenha dominado os conceitos básicos e tenha alguma experiência prática no uso do R.
1. O que é R e quais são suas principais características?
O R é uma linguagem e um ambiente de programação muito usados para solucionar problemas de ciência de dados e especialmente projetados para computação estatística e visualização de dados. Suas principais características incluem:
- Código aberto
- Interpretado (ou seja, compatível com programação funcional e orientada a objetos)
- Altamente extensível devido à sua grande coleção de pacotes de ciência de dados
- Funcional e flexível (os usuários podem definir suas próprias funções, bem como ajustar vários parâmetros das funções já existentes)
- Compatível com vários sistemas operacionais
- Pode ser facilmente integrado a outras linguagens e estruturas de programação
- Permite computação estatística avançada
- Oferece uma variedade de ferramentas de visualização de dados para criação de gráficos com qualidade de publicação
- Conta com a interface de linha de comando
- Tem apoio de uma forte comunidade online
2. Quais são algumas desvantagens de usar o R?
- Sintaxe não intuitiva e, portanto, uma curva de aprendizado desafiadora, principalmente para iniciantes em programação
- Relativamente lento
- Uso ineficiente da memória
- Documentação de pacotes inconsistente e muitas vezes difícil de ler
- Alguns pacotes são de baixa qualidade ou não passam por manutenção adequada
- Possíveis preocupações com a segurança devido à natureza de código aberto
3. Liste e defina alguns tipos de dados básicos no R.
- Numérico – números decimais.
- Inteiro – números inteiros.
- Caractere – uma letra, número ou símbolo, ou qualquer combinação deles, entre aspas duplas ou simples.
- Fator – categorias de um conjunto predefinido de valores possíveis, geralmente com uma ordem intrínseca.
- Lógico – os valores booleanos TRUE e FALSE, representados internamente como 1 e 0, respectivamente.
4. Liste e defina algumas estruturas de dados básicas no R.
- Vetor – estrutura de dados unidimensional usada para armazenar valores do mesmo tipo de dados.
- Lista – estrutura de dados multidimensional usada para armazenar valores de qualquer tipo de dados e/ou outras estruturas de dados.
- Matriz – estrutura de dados bidimensional usada para armazenar valores do mesmo tipo de dados.
- Data frame ou quadro de dados – estrutura de dados bidimensional usada para armazenar valores de qualquer tipo de dados, mas cada coluna deve armazenar valores do mesmo tipo.
5. Como importar dados no R?
O R base oferece funções essenciais para a importação de dados:
read.table()
– função mais geral do R base para importação de dados, aceita dados tabulares com qualquer tipo de separador de campo, inclusive os específicos, como |.read.csv()
– arquivos de valores separados por vírgula (CSV) com.
como separador decimal.read.csv2()
– arquivos de valores separados por ponto e vírgula com,
como separador decimal.read.delim()
– arquivos de valores separados por tabulação (TSV) com.
como separador decimal.read.delim2()
– arquivos de valores separados por tabulação (TSV) com,
como separador decimal.
Na prática, qualquer uma dessas funções pode ser usada para importar dados tabulares com qualquer tipo de campo e separadores decimais: seu uso para os formatos de arquivos especificados é apenas uma questão de convenção e configurações padrão. Como exemplo, esta é a sintaxe da primeira função: read.table(file, header = FALSE, sep = "", dec = ".")
. As outras funções têm os mesmos parâmetros com configurações padrão diferentes que sempre podem ser explicitamente substituídas.
Os pacotes tidyverse readr e readxl disponibilizam mais algumas funções para a importação de formatos de arquivo específicos. Cada uma dessas funções pode ser ajustada ainda mais com a configuração de vários parâmetros opcionais.
readr
read_tsv()
– arquivos de valores separados por tabulação (TSV).read_fwf()
– arquivos de largura fixa.read_log()
– arquivos de registro da web.read_table()
,read_csv()
,read_csv2()
eread_delim()
– equivalentes às funções do R base.
readxl
read_excel()
– arquivos do Excel.read_csv()
– equivalente à função das funções do R base.
Para se aprofundar no carregamento de dados no R, você pode consultar o tutorial Como importar dados para o R.
6. O que é um pacote no R e como se instala e carrega pacotes?
Um pacote R é um conjunto de funções, códigos, dados e documentação, representando uma extensão da linguagem de programação R e projetado para resolver tipos específicos de tarefas. O R vem com vários pacotes pré-instalados, e outros pacotes podem ser instalados pelos usuários em repositórios. O repositório centralizado mais conhecido, que armazena milhares de pacotes R, é chamado de Comprehensive R Archive Network (CRAN).
Para instalar um pacote R diretamente do CRAN, precisamos passar o nome do pacote entre aspas na função install.packages()
, como segue: install.packages("package_name")
. Para instalar mais de um pacote do CRAN de uma só vez, precisamos usar um vetor de caracteres que contenha os nomes dos pacotes entre aspas, do seguinte modo: install.packages(c("package_name_1", "package_name_2")
. Para instalar um pacote R manualmente, primeiro precisamos fazer o download do pacote como um arquivo zip no computador e, em seguida, executar install.packages() function
:
install.packages("path_to_the_locally_stored_zipped_package_file", repos=NULL, type="source")
Para carregar um pacote R instalado no ambiente de trabalho do R, podemos usar as funções library()
ou require()
. Cada um deles recebe o nome do pacote sem aspas e carrega o pacote, por exemplo, library(caret)
. No entanto, o comportamento dessas funções é diferente quando elas não conseguem encontrar o pacote necessário: library()
lança um erro e interrompe a execução do programa, enquanto require()
emite um aviso e continua a execução do programa.
7. Como criar um quadro de dados no R?
1. A partir de um ou mais vetores do mesmo comprimento, usando a função data.frame()
:
df <- data.frame(vector_1, vector_2)
2. A partir de uma matriz, usando a função data.frame()
:
df <- data.frame(my_matrix)
3. A partir de uma lista de vetores do mesmo comprimento, usando a função data.frame()
:
df <- data.frame(list_of_vectors)
4. De outros quadros de dados:
- Para combinar os quadros de dados horizontalmente (somente se os quadros de dados tiverem o mesmo número de linhas e os registros forem os mesmos e estiverem na mesma ordem) – usando a função
cbind()
:
df <- cbind(df1, df2)
- Para combinar os quadros de dados verticalmente (somente se eles tiverem o mesmo número de colunas, com nomes idênticos, do mesmo tipo de dados e que apareçam na mesma ordem) – usando a função
rbind()
:
df <- rbind(df1, df2)
8. Como adicionamos uma nova coluna a um quadro de dados no R?
- Usando o símbolo $:
df <- data.frame(col_1=10:13, col_2=c("a", "b", "c", "d"))
print(df)
df$col_3 <- c(5, 1, 18, 16)
print(df)
Saída:
col_1 col_2
1 10 a
2 11 b
3 12 c
4 13 d
col_1 col_2 col_3
1 10 a 5
2 11 b 1
3 12 c 18
4 13 d 16
- Usando colchetes:
df <- data.frame(col_1=10:13, col_2=c("a", "b", "c", "d"))
print(df)
df["col_3"] <- c(5, 1, 18, 16)
print(df)
Saída:
col_1 col_2
1 10 a
2 11 b
3 12 c
4 13 d
col_1 col_2 col_3
1 10 a 5
2 11 b 1
3 12 c 18
4 13 d 16
- Usando a função
cbind()
:
df <- data.frame(col_1=10:13, col_2=c("a", "b", "c", "d"))
print(df)
df <- cbind(df, col_3=c(5, 1, 18, 16))
print(df)
Saída:
col_1 col_2
1 10 a
2 11 b
3 12 c
4 13 d
col_1 col_2 col_3
1 10 a 5
2 11 b 1
3 12 c 18
4 13 d 16
Em cada um dos três casos, podemos atribuir um único valor ou um vetor ou calcular a nova coluna com base nas colunas existentes desse quadro de dados ou de outros quadros de dados.
9. Como remover colunas de um quadro de dados no R?
1. Usando a função select()
do pacote dplyr da coleção tidyverse. O nome de cada coluna a ser excluída é passado com um sinal de menos antes dele:
df <- select(df, -col_1, -col_3)
Se, em vez disso, tivermos muitas colunas para excluir, faz mais sentido manter o restante das colunas em vez de excluir as colunas de interesse. Nesse caso, a sintaxe é semelhante, mas os nomes das colunas a serem mantidas não são precedidos de um sinal de menos:
df <- select(df, col_2, col_4)
2. Utilizando a função integrada subset() do R base. Se precisarmos excluir apenas uma coluna, atribuímos ao parâmetro select da função o nome da coluna precedido de um sinal de menos. Para excluir mais de uma coluna, atribuímos a esse parâmetro um vetor que contém os nomes das colunas necessárias, precedidos de um sinal de menos:
df <- subset(df, select=-col_1)
df <- subset(df, select=-c(col_1, col_3))
Se, em vez disso, tivermos muitas colunas para excluir, faz mais sentido manter o restante das colunas em vez de excluir as colunas de interesse. Nesse caso, a sintaxe é semelhante, mas não é adicionado o sinal de menos:
df <- subset(df, select=col_2)
df <- subset(df, select=c(col_2, col_4))
10. O que é um fator no R?
Um fator no R é um tipo de dados específico que aceita categorias (também conhecidas como níveis) de um conjunto predefinido de valores possíveis. Essas categorias se parecem com caracteres, mas, internamente, são armazenadas como números inteiros. Muitas vezes, essas categorias têm uma ordem intrínseca. Por exemplo: uma coluna de um quadro de dados que contém as opções da escala Likert para avaliar pontos de vista ("concordo totalmente", "concordo", "concordo em parte", "nem concordo nem discordo", "discordo em parte", "discordo", "discordo totalmente") deve ser do tipo fator para capturar essa ordem intrínseca e refleti-la adequadamente em gráficos de tipos categóricos.
11. O que é o RStudio?
O RStudio é um IDE (ambiente de desenvolvimento integrado) de código aberto muito utilizado como front-end gráfico para trabalhar com a linguagem de programação R a partir da versão 3.0.1. Ele tem vários recursos úteis que o tornam muito conhecido entre os usuários do R:
- Fácil de usar
- Flexível
- Multifuncional
- Permite a criação de scripts reutilizáveis
- Controla o histórico operacional
- Preenche automaticamente o código
- Oferece ajuda detalhada e abrangente sobre qualquer objeto
- Oferece acesso fácil a todos os dados importados e objetos criados
- Facilita a alternância entre o terminal e o console
- Permite a visualização de gráficos
- Oferece suporte à criação e ao compartilhamento eficientes de projetos
- Pode ser usado com outras linguagens de programação (Python, SQL, etc.)
Para saber mais sobre o que é o RStudio e como instalá-lo e começar a usá-lo, você pode seguir o Tutorial de RStudio.
12. O que é R Markdown?
O R Markdown é um pacote R gratuito e de código aberto que fornece uma estrutura de autoria para a criação de projetos de ciência de dados. Com ele, podemos gravar um único arquivo .rmd que combina narrativa, código e gráficos de dados e, em seguida, renderizar esse arquivo em um formato de saída selecionado. As principais características do R Markdown são:
- Os documentos resultantes são compartilháveis, totalmente reproduzíveis e com qualidade de publicação.
- Uma ampla variedade de saídas e formatos estáticos e dinâmicos, como HTML, PDF, Microsoft Word, documentos interativos, painéis, relatórios, artigos, livros, apresentações, aplicativos, sites, modelos reutilizáveis, etc.
- Fácil monitoramento do controle de versão.
- Compatível com várias linguagens de programação, como R, Python e SQL.
13. Como criar uma função definida pelo usuário no R?
Para criar uma função definida pelo usuário no R, usamos a palavra-chave function
e a seguinte sintaxe:
function_name <- function(parameters){
function body
}
- Nome da função – o nome do objeto de função que será usado para chamar a função após sua definição.
- Parâmetros da função – as variáveis separadas por vírgula e colocadas entre parênteses que serão definidas como valores de argumento reais sempre que chamarmos a função.
- Corpo da função – trecho de código entre chaves que contém as operações a serem executadas em uma ordem predefinida com base nos argumentos de entrada sempre que chamarmos a função. Normalmente, o corpo da função contém a instrução (ou instruções)
return()
que retorna a saída da função ou a instrução (ou instruções)print()
para imprimir a saída.
Exemplo de uma função simples definida pelo usuário no R:
my_function <- function(x, y){
return(x + y)
}
14. Liste alguns pacotes conhecidos para visualização de dados em R.
- ggplot2 – o pacote de visualização de dados mais conhecido do R, que permite a criação de uma grande variedade de gráficos.
- Lattice – para exibição de dados multivariados como um painel em mosaico (treliça) com vários gráficos.
- Plotly – para criação de gráficos interativos e com qualidade de publicação.
- highcharter – para facilitar a geração de gráficos dinâmicos, oferece muitos recursos flexíveis, plug-ins e temas; permite a criação de gráficos com diferentes objetos R com uma única função.
- Leaflet– para criação de mapas interativos.
- ggvis – para criação de gráficos interativos e altamente personalizáveis que podem ser acessados em qualquer navegador usando a infraestrutura do Shiny.
- patchwork – para combinar vários gráficos, geralmente de vários tipos, no mesmo gráfico.
Perguntas de entrevistas sobre programação em R de nível intermediário
Para profissionais mais experientes, é provável que o entrevistador faça algumas perguntas que exijam um conhecimento mais detalhado do R. Aqui vão algumas questões para as quais você deve se preparar:
15. Como atribuir um valor a uma variável no R?
- Usando o operador de atribuição
<-
, por exemplo,my_var <- 1—
a maneira mais comum de atribuir um valor a uma variável no R. - Usando o operador de igualdade
=
, por exemplo,my_var = 1
– para atribuir valores a argumentos dentro da definição de uma função. - Usando o operador de atribuição para a direita
->
, por exemplo,my_var -> 1
– pode ser usado em pipes. - Usando os operadores de atribuição global, seja para a esquerda (
<<-
) ou para a direita (->>
), por exemplo,my_var <<- 1
– para criar uma variável global dentro da definição de uma função.
16. Quais são os requisitos para dar nome a variáveis no R?
- O nome de uma variável pode ser uma combinação de letras, dígitos, pontos e sublinhados. Não pode conter nenhum outro símbolo, inclusive espaços em branco.
- O nome de uma variável precisa começar com uma letra ou um ponto.
- Se o nome de uma variável começar com um ponto, esse ponto não poderá ser seguido de um dígito.
- As palavras reservadas no R (
TRUE
,for
,NULL
, etc.) não podem ser usadas como nomes de variáveis. - Nos nomes das variáveis, há diferenciação de maiúsculas de minúsculas.
No curso Como escrever códigos eficientes em R, você encontra outras práticas recomendadas para escrever código na linguagem R.
17. Quais são os tipos de loops existentes no R e qual é a sintaxe de cada tipo?
1. O loop for itera sobre uma sequência o número de vezes igual ao seu comprimento (a menos que sejam usadas as instruções break
e/ou next
) e executa o mesmo conjunto de operações em cada item dessa sequência. É o tipo mais comum de loop. A sintaxe de um loop for no R é a seguinte:
for (variable in sequence) {
operations
}
2. Loop While loop – executa o mesmo conjunto de operações até que uma ou mais condições lógicas predefinidas sejam atendidas – a menos que sejam usadas as instruções break
e/ou next
. Ao contrário dos loops for, não sabemos com antecedência o número de iterações que um loop while vai executar. Antes de executar um loop while, precisamos atribuir uma ou mais variáveis e, em seguida, atualizar seu valor no corpo do loop a cada iteração. A sintaxe de um loop while no R é a seguinte:
variable assignment
while (logical condition) {
operations
variable update
}
3. Loop repeat – executa repetidamente o mesmo conjunto de operações até que uma ou mais condições de interrupção sejam atendidas. Para introduzir essa condição, um loop repeat deve conter um bloco de código com uma instrução if, que, por sua vez, precisa incluir a instrução break
em seu corpo. Assim como os loops while, não sabemos com antecedência o número de iterações que um loop repeat vai executar. A sintaxe de um loop repeat no R é a seguinte:
repeat {
operations
if(break condition) {
break
}
}
Você pode ler mais sobre loops no R em nosso tutorial dedicado ao assunto.
18. Como agregar dados no R?
Para agregar dados no R, usamos a função aggregate()
. Essa função tem os seguintes parâmetros essenciais, nesta ordem:
x
– quadro de dados a ser agregado.by
– lista de fatores usados como base para o agrupamento.FUN
– função de agregação para calcular as estatísticas resumidas de cada grupo (por exemplo:mean
,max
,min
,count
,sum
).
19. Como mesclar dados no R?
1. Usando a função cbind()
– somente se os quadros de dados tiverem o mesmo número de linhas e os registros forem os mesmos e estiverem na mesma ordem:
df <- cbind(df1, df2)
2. Usando a função rbind()
para combinar os quadros de dados verticalmente – somente se eles tiverem um número igual de colunas, com nomes idênticos, do mesmo tipo de dados e na mesma ordem:
df <- rbind(df1, df2)
3. Usando a função merge()
para mesclar quadros de dados usando uma coluna em comum, geralmente uma coluna de ID:
- Junção interna:
df <- merge(df1, df2, by="ID")
- Junção à esquerda:
df <- merge(df1, df2, by="ID", all.x=TRUE)
- Junção à direita:
df <- merge(df1, df2, by="ID", all.y=TRUE)
- Junção externa:
df <- merge(df1, df2, by="ID", all=TRUE)
4. Usando a função join()
do pacote dplyr para mesclar quadros de dados com base em uma coluna em comum, geralmente uma coluna de ID:
df <- join(df1, df2, by="ID", type="type_of_join")
O parâmetro type
assume um dos seguintes valores: "inner", "left", "right" ou "full".
20. Como concatenar strings no R?
Você pode concatenar duas ou mais strings no R usando as funções paste()
ou cat()
. A primeira abordagem é mais comum. Ambas as funções recebem qualquer número de strings a serem concatenadas e também podem receber o parâmetro opcional sep
(juntamente com alguns outros parâmetros opcionais) – um caractere ou uma sequência de caracteres que vai separar as strings combinadas na string resultante (por padrão, um espaço em branco).
21. Como transpor dados bidimensionais no R?
Podemos transpor um quadro de dados ou uma matriz no R para que as colunas se tornem linhas e vice-versa. Para isso, precisamos usar a função t()
do R base. Por exemplo:
df <- data.frame(col_1=c(10, 20, 30), col_2=c(11, 22, 33))
print(df)
transposed_df <- t(df)
print(transposed_df)
Saída:
col_1 col_2
1 10 11
2 20 22
3 30 33
[,1] [,2] [,3]
col_1 10 20 30
col_2 11 22 33
22. Como encadear várias operações no R?
Podemos encadear várias operações no R usando o operador pipe (%>%
) disponibilizado pela coleção tidyverse. O uso desse operador permite criar um pipeline de funções em que a saída da primeira função é passada como entrada para a segunda função e assim por diante, até que o pipeline termine. Isso elimina a necessidade de criar mais variáveis e melhora consideravelmente a legibilidade geral do código.
Exemplo de uso do operador pipe em um quadro de dados:
df <- data.frame(a=1:4, b=11:14, c=21:24)
print(df)
df_new <- df %>% select(a, b) %>% filter(a > 2)
print(df_new)
Saída:
a b c
1 1 11 21
2 2 12 22
3 3 13 23
4 4 14 24
a b
1 3 12
2 4 13
23. Que tipos de gráficos de dados podem ser criados no R?
Como a visualização de dados é um dos pontos fortes das linguagens de programação R, podemos criar gráficos de dados de todo tipo no R:
- Tipos comuns de gráficos de dados:
- Gráfico de barras – mostra os valores numéricos de dados categóricos.
- Gráfico de linhas – mostra a progressão de uma variável, geralmente ao longo do tempo.
- Gráfico de dispersão – mostra as relações entre duas variáveis.
- Gráfico de área – baseado em um gráfico de linhas, com a área abaixo da linha colorida ou preenchida com um padrão.
- Gráfico de pizza – mostra a proporção de cada categoria de dados categóricos como parte do todo.
- Diagrama de caixa (box plot) – mostra um conjunto de estatísticas descritivas dos dados.
- Tipos avançados de gráficos de dados:
- Gráfico de violino – mostra um conjunto de estatísticas descritivas dos dados e a forma de distribuição desses dados.
- Mapa de calor – mostra a magnitude de cada ponto de dados numéricos no conjunto de dados.
- Mapa de árvore – mostra os valores numéricos de dados categóricos, geralmente como parte do todo.
- Dendrograma – mostra uma hierarquia interna e o agrupamento dos dados.
- Gráfico de bolhas – mostra as relações entre três variáveis.
- Gráfico hexbin (agrupamento hexagonal) – mostra as relações de duas variáveis numéricas em um conjunto de dados relativamente grande.
- Nuvem de palavras – mostra a frequência das palavras em um texto de entrada.
- Mapa coroplético – mostra estatísticas temáticas agregadas de geodados.
- Gráfico circular de agrupamento – mostra uma hierarquia interna dos dados e valores dos pontos de dados
- etc.
O programa de habilidades Visualização de Dados com R ajuda você a ampliar os horizontes na área de gráficos R. Se você preferir aprender a visualização de dados em R em um contexto mais amplo, conheça um programa de carreira completo e ótimo para iniciantes, Cientista de Dados com R.
24. O que é reciclagem de vetores no R?
Quando tentamos fazer alguma operação com dois vetores R de comprimentos diferentes, o interpretador R identifica o menor, recicla seus itens na mesma ordem até que o comprimento dos dois vetores coincida e somente então faz a operação necessária com os vetores. No entanto, antes de iniciar a reciclagem do vetor, o interpretador R exibe uma mensagem de aviso sobre a incompatibilidade inicial dos comprimentos dos vetores.
Por exemplo, se tentarmos executar a seguinte adição:
c(1, 2, 3, 4, 5) + c(1, 2, 3)
Devido à reciclagem de vetores, o segundo vetor será de fato convertido em c(1, 2, 3, 1, 2)
. Portanto, o resultado final da operação será c(2, 4, 6, 5, 7)
.
Embora às vezes a reciclagem de vetores possa ser vantajosa (ex.: quando esperamos a ciclicidade dos valores nos vetores), na maioria das vezes ela é inadequada e enganosa. Por isso, devemos ter cuidado e observar o comprimento dos vetores antes de fazer operações com eles.
25. Qual é a utilidade das instruções next
e break
no R?
A instrução next
é usada para ignorar uma iteração específica e passar para a próxima se uma determinada condição for atendida. A instrução break
é usada para interromper e sair do loop em uma iteração específica se uma determinada condição for atendida. Quando usada em um dos loops internos de um loop aninhado, essa instrução sai apenas desse loop interno.
As instruções next
e break
podem ser usadas em qualquer tipo de loop no R: loops for, loops while e loops repeat. Também podem ser usadas no mesmo loop, por exemplo:
for(i in 1:10) {
if(i < 5)
next
if(i == 8)
break
print(i)}
Saída:
[1] 5
[1] 6
[1] 7
26. Qual é a diferença entre as funções str()
e summary()
no R?
A função str()
retorna a estrutura de um objeto R e as informações gerais sobre ele, cujo conteúdo exato depende da estrutura de dados desse objeto. Por exemplo: no caso de um vetor, ela retorna o tipo de dados de seus itens, o intervalo de índices dos itens e os valores dos itens (ou os primeiros valores, se o vetor for muito longo). No caso de um quadro de dados, ela retorna sua classe (data.frame), o número de observações e variáveis, o nome das colunas, o tipo de dados de cada coluna e os primeiros valores de cada coluna.
A função summary()
retorna as estatísticas resumidas de um objeto R. É aplicada principalmente a quadros de dados e matrizes, para os quais retorna os valores mínimo, máximo, médio e mediano, além do 1º e 3º quartis de cada coluna numérica. No caso de colunas de fatores, retorna a contagem de cada nível.
27. Qual é a diferença entre as funções subset()
e sample()
no R?
A função subset()
no R é usada para extrair linhas e colunas de um quadro de dados ou de uma matriz, ou elementos de um vetor, com base em determinadas condições, por exemplo: subset(my_vector, my_vector > 10)
.
Já a função sample()
no R pode ser aplicada somente a vetores. Ela extrai uma amostra aleatória com tamanho predefinido dos elementos de um vetor, com ou sem substituição. Por exemplo: sample(my_vector, size=5, replace=TRUE)
Perguntas de entrevistas sobre programação em R de nível avançado
28. Como criar uma nova coluna em um quadro de dados do R com base em outras colunas?
1. Usando as funções transform()
e ifelse()
do R base:
df <- data.frame(col_1 = c(1, 3, 5, 7), col_2 = c(8, 6, 4, 2))
print(df)
# Adding the column col_3 to the data frame df
df <- transform(df, col_3 = ifelse(col_1 < col_2, col_1 + col_2, col_1 * col_2))
print(df)
Saída:
col_1 col_2
1 1 8
2 3 6
3 5 4
4 7 2
col_1 col_2 col_3
1 1 8 9
2 3 6 9
3 5 4 20
4 7 2 14
2. Usando as funções with()
e ifelse()
do R base:
df <- data.frame(col_1 = c(1, 3, 5, 7), col_2 = c(8, 6, 4, 2))
print(df)
# Adding the column col_3 to the data frame df
df["col_3"] <- with(df, ifelse(col_1 < col_2, col_1 + col_2, col_1 * col_2))
print(df)
Saída:
col_1 col_2
1 1 8
2 3 6
3 5 4
4 7 2
col_1 col_2 col_3
1 1 8 9
2 3 6 9
3 5 4 20
4 7 2 14
3. Usando a função apply()
do R base:
df <- data.frame(col_1 = c(1, 3, 5, 7), col_2 = c(8, 6, 4, 2))
print(df)
# Adding the column col_3 to the data frame df
df["col_3"] <- apply(df, 1, FUN = function(x) if(x[1] < x[2]) x[1] + x[2] else x[1] * x[2])
print(df)
Saída:
col_1 col_2
1 1 8
2 3 6
3 5 4
4 7 2
col_1 col_2 col_3
1 1 8 9
2 3 6 9
3 5 4 20
4 7 2 14
4. Usando a função mutate()
do pacote dplyr e a função ifelse()
do R base:
df <- data.frame(col_1 = c(1, 3, 5, 7), col_2 = c(8, 6, 4, 2))
print(df)
# Adding the column col_3 to the data frame df
df <- mutate(df, col_3 = ifelse(col_1 < col_2, col_1 + col_2, col_1 * col_2))
print(df)
Saída:
col_1 col_2
1 1 8
2 3 6
3 5 4
4 7 2
col_1 col_2 col_3
1 1 8 9
2 3 6 9
3 5 4 20
4 7 2 14
29. Como analisar uma data a partir de sua representação em string no R?
Para analisar uma data a partir de sua representação em string no R, devemos usar o pacote lubridate da coleção tidyverse. Esse pacote oferece várias funções para analisar uma string e extrair a data padrão dela com base no padrão de data inicial dessa string. Essas funções são ymd()
, ymd_hm()
, ymd_hms()
, dmy()
, dmy_hm()
, dmy_hms()
, mdy()
, mdy_hm()
, mdy_hms()
, etc., em que y, m, d, h, m e s correspondem a ano, mês, dia, horas, minutos e segundos, respectivamente.
Por exemplo: se executarmos a função dmy()
passando nela qualquer uma destas strings, "05-11-2023", "05/11/2023" ou "05.11.2023", que representam a mesma data, receberemos o mesmo resultado: 2023-11-05
. Isso ocorre porque, nos três casos, apesar de termos símbolos de separação diferentes, temos o mesmo padrão: o dia seguido do mês seguido do ano.
30. Qual é a utilidade da função switch()
no R?
A função switch()
no R é uma instrução de controle de ramificação multidirecional que avalia uma expressão em relação aos itens de uma lista. Tem a seguinte sintaxe:
switch(expression, case_1, case_2, case_3....)
A expressão passada na função switch()
pode ser avaliada como um número ou uma string e, dependendo disso, o comportamento da função é diferente.
1. Se a expressão for avaliada como um número, a função switch()
retornará o item da lista com base na correspondência posicional (ou seja, seu índice é igual ao número que a expressão avalia). Se o número for maior do que o número de itens da lista, a função switch()
retornará NULL
. Por exemplo:
switch(2, "circle", "triangle", "square")
Saída:
"triangle"
2. Se a expressão for avaliada como uma string, a função switch()
retornará o valor com base em seu nome:
switch("red", "green"="apple", "orange"="carot", "red"="tomato", "yellow"="lemon")
Saída:
"tomato"
Se houver várias correspondências, será retornado o primeiro valor correspondente. Também é possível adicionar um item sem nome como último argumento da função switch()
, atuando como opção de fallback padrão caso não haja correspondências. Se essa opção padrão não for definida e se não houver correspondências, a função retornará NULL
.
A função switch()
é uma alternativa eficiente às longas instruções if-else, pois torna o código menos repetitivo e mais legível. Normalmente ele é usado para avaliar uma única expressão. Ainda podemos escrever construtos switch aninhados mais complexos para avaliar várias expressões. No entanto, nesse formato, a função switch()
rapidamente se torna difícil de ler e, portanto, perde sua principal vantagem em relação às construções if-else.
31. Qual é a diferença entre as funções apply()
, lapply()
, sapply()
e tapply()
?
Embora todas essas funções permitam a iteração sobre uma estrutura de dados sem o uso de loops e executem a mesma operação em cada elemento dela, elas são diferentes no que diz respeito ao tipo de entrada e saída e da função que executam.
apply()
– recebe um quadro de dados ou uma matriz e retorna um vetor, uma lista ou uma matriz. Essa função pode ser aplicada em linhas, colunas ou ambas.lapply()
– recebe um vetor, uma lista ou um quadro de dados e sempre retorna uma lista. No caso de um quadro de dados como entrada, essa função é aplicada somente em colunas.sapply()
– recebe um vetor, uma lista ou um quadro de dados e retorna a estrutura de dados mais simplificada, ou seja, um vetor no caso de um vetor de entrada, uma lista no caso de uma lista de entrada e uma matriz no caso de um quadro de dados de entrada.tapply()
– Calcula estatísticas resumidas para diferentes fatores (ou seja, dados categóricos).
32. Liste e defina as instruções de controle no R.
Há três grupos de instruções de controle no R: instruções condicionais, instruções de loop e instruções de salto.
Instruções condicionais:
if
– testa se uma determinada condição é verdadeira e fornece operações a serem executadas em caso afirmativo.if-else
– testa se uma determinada condição é verdadeira, fornece operações a serem executadas em caso afirmativo e outro conjunto de operações a serem executadas caso a condição seja falsa.if... else if... else
– testa uma série de condições uma a uma, fornece operações a serem executadas para cada condição se ela for verdadeira e um conjunto de operações de fallback a serem executadas se nenhuma dessas condições for verdadeira.switch
– avalia uma expressão em relação aos itens de uma lista e retorna um valor da lista com base nos resultados dessa avaliação.
Instruções de loop:
for
– em loops for, itera sobre uma sequência.while
– em loops while, verifica se uma ou mais condições lógicas predefinidas são atendidas na iteração atual.repeat
– em loops repeat, continua executando o mesmo conjunto de operações até que uma ou mais condições de interrupção predefinidas sejam atendidas.
Instruções de salto:
next
– pula uma iteração específica de um loop e passa para a próxima se uma determinada condição for atendida.break
– interrompe e sai do loop em uma iteração específica se uma determinada condição for atendida.return
– sai de uma função e retorna o resultado.
33. O que são expressões regulares e como trabalhamos com elas no R?
Uma expressão regular, ou regex, em R ou em outras linguagens de programação, é um caractere ou uma sequência de caracteres que descreve um determinado padrão de texto e é usada para minerar dados de texto. No R, há duas maneiras principais de trabalhar com expressões regulares:
- Usar o R base e suas funções (como
grep()
,regexpr()
,gsub()
,regmatches()
, etc.) para localizar, buscar correspondências, extrair e substituir regex. - Usar um pacote stringr especializado da coleção tidyverse. Essa é uma maneira mais conveniente de trabalhar com o regex do R, pois as funções do stringr têm nomes e sintaxe muito mais intuitivos e oferecem uma funcionalidade mais ampla.
O Guia para Expressões Regulares do R apresenta mais detalhes sobre como trabalhar com regex no R.
34. Quais pacotes são usados para aprendizado de máquina no R?
- caret – para vários algoritmos de classificação e regressão.
- e1071 – para máquinas de vetores de suporte (SVM), classificador Naive Bayes, bagged clustering, agrupamento difuso e k vizinhos mais próximos (kNN).
- kernlab – disponibiliza métodos baseados em kernel para algoritmos de classificação, regressão e agrupamento.
- randomForest – para algoritmos de floresta aleatória para regressão e classificação.
- xgboost – algoritmos de aumento de gradiente, regressão linear e árvore de decisão.
- rpart – particionamento recursivo em árvores de classificação, regressão e sobrevivência.
- glmnet – para métodos de regularização de lasso e rede elástica aplicados a algoritmos de regressão linear, regressão logística e regressão multinomial.
- nnet – para redes neurais e algoritmos log-lineares multinomiais.
- tensorflow – interface do R para o TensorFlow, para redes neurais profundas e computação numérica usando gráficos de fluxo de dados.
- Keras – interface do R para o Keras, para redes neurais profundas.
35. Como selecionar variáveis independentes (features) para aprendizado de máquina no R?
Vamos considerar três abordagens diferentes e como implementá-las no pacote caret.
- Detectando e removendo do conjunto de dados variáveis independentes altamente correlacionadas.
Precisamos criar uma matriz de correlação de todas as variáveis independentes e, em seguida, identificar as altamente correlacionadas, geralmente aquelas com coeficiente de correlação maior que 0,75:
corr_matrix <- cor(features)
highly_correlated <- findCorrelation(corr_matrix, cutoff=0.75)
print(highly_correlated)
- Classificando as variáveis independentes do dataframe de acordo com sua importância.
Precisamos criar um esquema de treinamento para controlar os parâmetros do treinamento, usá-lo para criar um modelo selecionado e, em seguida, estimar a importância da variável para o modelo:
control <- trainControl(method="repeatedcv", number=10, repeats=5)
model <- train(response_variable~., data=df, method="lvq", preProcess="scale", trControl=control)
importance <- varImp(model)
print(importance)
- Selecionando automaticamente as variáveis independentes ideais.
Um dos métodos mais conhecidos disponíveis no caret para selecionar automaticamente as variáveis independentes ideais é um algoritmo de seleção retroativa chamado RFE (Recursive Feature Elimination, eliminação recursiva de variáveis independentes).
Precisamos calcular o controle usando um método de reamostragem selecionado e uma lista predefinida de funções, aplicar o algoritmo RFE passando nele as variáveis independentes, a variável dependente, o número de variáveis independentes a serem retidas e o controle e, em seguida, extrair os preditores selecionados:
control <- rfeControl(functions=caretFuncs, method="cv", number=10)
results <- rfe(features, target_variable, sizes=c(1:8), rfeControl=control)
print(predictors(results))
Se você precisa fortalecer suas habilidades de aprendizado de máquina em R, aqui vai um recurso confiável e abrangente: Cientista de aprendizado de máquina com R.
36. O que significa correlação e covariância e como calculá-las no R?
A correlação é uma medida da força e da direção das relações lineares entre duas variáveis. Assume valores de -1 (correlação negativa perfeita) a 1 (correlação positiva perfeita). A covariância é uma medida do grau de alteração de uma variável em relação a outra e da direção das relações lineares entre elas. Ao contrário da correlação, a covariância não tem nenhum limite de intervalo.
No R, para calcular a correlação, precisamos usar a função cor()
e, para calcular a covariância, a função cov()
. A sintaxe de ambas as funções é idêntica: precisamos passar duas variáveis (vetores) das quais queremos calcular a medida (ex.: cor(vector_1, vector_2)
ou cov(vector_1, vector_2)
), ou o quadro de dados inteiro, se quisermos calcular a correlação ou covariância entre todas as variáveis do quadro de dados (ex.: cor(df) or cov(df)
). No caso de dois vetores, o resultado será um único valor; no caso de um quadro de dados, o resultado será uma matriz de correlação (ou covariância).
37. Liste e defina as várias abordagens para estimar a precisão do modelo no R.
A seguir, você encontra várias abordagens e como implementá-las no pacote caret do R.
- Divisão de dados – o conjunto de dados inteiro é dividido em um conjunto de dados de treinamento e um conjunto de dados de teste. O primeiro é usado para ajustar o modelo, e o segundo é usado para testar seu desempenho com dados não vistos. Essa abordagem funciona particularmente bem em big data. Para implementar a divisão de dados no R, precisamos usar a função
createDataPartition()
e definir o parâmetro p como a proporção necessária de dados que vai para o treinamento. - Reamostragem por bootstrap – extrair amostras aleatórias de dados do conjunto de dados e estimar o modelo com base nelas. Essas iterações de reamostragem são executadas várias vezes e com substituição. Para implementar a reamostragem por bootstrap no R, precisamos definir o parâmetro
method
da funçãotrainControl()
como"boot"
ao definir o controle de treinamento do modelo. - Métodos de validação cruzada
- Validação cruzada com k subgrupos (k-fold) – o conjunto de dados é dividido em k subconjuntos. O modelo é treinado com k-1 subconjuntos e testado no restante. O mesmo processo é repetido para todos os subconjuntos e, em seguida, a precisão do modelo final é estimada.
- Validação cruzada com k subgrupos (k-fold) repetida – o princípio é o mesmo da validação cruzada com k subgrupos, porém o conjunto de dados é dividido em k subconjuntos mais de uma vez. Em cada repetição, a precisão do modelo é estimada e, em seguida, a precisão final do modelo é calculada como a média dos valores de precisão do modelo para todas as repetições.
- Validação cruzada leave-one-out (LOOCV) – uma observação de dados é deixada de lado e o modelo é treinado com todas as outras observações de dados. O mesmo processo é repetido para todas as observações de dados.
Para implementar esses métodos de validação cruzada no R, precisamos definir o parâmetro method
da função trainControl()
como "cv"
, "repeatedcv"
ou "LOOCV"
, respectivamente, ao definir o controle de treinamento do modelo.
38. O que é o teste do qui-quadrado e como executá-lo no R?
O teste de hipótese estatística qui-quadrado é uma técnica usada para determinar se duas variáveis categóricas são independentes ou se há correlação entre elas. Para realizar o teste de qui-quadrado no R, precisamos usar a função chisq.test()
do pacote stats. As etapas são as seguintes:
1. Criar uma tabela de contingência com as variáveis categóricas de interesse usando a função table()
do R base:
table = table(df["var_1"], df["var_2"])
2. Passar a tabela de contingência na função chisq.test()
:
chisq.test(table)
Você pode atualizar seus conhecimentos sobre testes de qui-quadrado e outros testes de hipótese em nosso curso Testes de Hipóteses no R.
39. O que é o Shiny do R?
O Shiny é um pacote R de código aberto que permite a criação fácil e rápida de aplicativos e páginas web totalmente interativos para ciência de dados usando apenas R, sem nenhum conhecimento de HTML, CSS ou JavaScript. O Shiny do R oferece vários recursos básicos e avançados, widgets, layouts, exemplos de aplicativos web e seu código subjacente para serem desenvolvidos e personalizados, bem como apresentações de usuários de várias áreas (tecnologia, esportes, bancos, educação etc.) reunidos e categorizados pela comunidade de desenvolvedores de aplicativos Shiny.
40. Qual é a diferença entre as funções with()
e within()
?
A função with()
avalia uma expressão do R com uma ou mais variáveis de um quadro de dados e gera o resultado sem modificar o quadro de dados. A função within()
avalia uma expressão do R com uma ou mais variáveis de um quadro de dados, modifica o quadro de dados e gera o resultado. A seguir, você verá como essas funções funcionam usando um quadro de dados de amostra como exemplo:
df <- data.frame(a = c(1, 2, 3), b = c(10, 20, 30))
print(df)
with(df, a * b)
print(within(df, c <- a * b))
Saída:
a b
1 1 10
2 2 20
3 3 30
10 40 90
a b c
1 1 10 10
2 2 20 40
3 3 30 90
Ao usar a função within()
, para salvar as modificações, precisamos atribuir o resultado da função a uma variável.
Conclusão
Para concluir, neste artigo, consideramos as 40 perguntas mais comuns em entrevistas sobre programação em R e quais respostas são esperadas para cada uma delas. Esperamos que, com essas informações em mãos, você se sinta mais confiante e pronto para uma entrevista bem-sucedida em R, quer você esteja procurando um emprego em R ou buscando o candidato ideal para uma vaga em aberto na sua empresa.
Para adquirir experiência prática em responder a perguntas, confira nosso curso Treino para perguntas de entrevistas sobre estatística em R.
Comece sua jornada de R hoje mesmo!
Track
Associate Data Scientist
Course
Introduction to R
blog
25 perguntas essenciais para entrevistas sobre o Power BI para todos os níveis
blog
As 25 principais perguntas da entrevista sobre o Excel para todos os níveis
blog
As 31 principais perguntas e respostas de entrevistas com analistas de negócios para todos os níveis
blog
As 45 principais perguntas da entrevista sobre PostgreSQL para todos os níveis
tutorial
Pacotes R: Um tutorial para iniciantes
DataCamp Team
23 min