Trabalhando com Arquivos
Parte da seção Programação Orientada a Objetos do Journey de R da Coddy. Lição 1 de 57.
Programas reais são divididos em vários arquivos. Em R, source("Greeting.R") executa outro arquivo de cima para baixo, e todas as funções definidas nesse arquivo ficam disponíveis depois:
# Greeting.R
greeting <- function(name) {
paste0("Hello, ", name, "!")
}
# main.R
source("Greeting.R")
cat(greeting("Ada"), "\n")Executar main.R imprime Hello, Ada!: a linha source() carrega greeting() antes de main.R chamá-la.
O programa começa no arquivo que você executa, aqui main.R, e R o lê linha por linha. A ordem importa: uma função só existe depois que o arquivo que a define foi carregado com source(), então as linhas source() ficam no topo:
# main.R
cat(greeting("Ada"), "\n") # Erro: não foi possível encontrar a função "greeting"
source("Greeting.R")
cat(greeting("Ada"), "\n") # funciona: greeting() agora existeA organização usual é uma classe por arquivo, com o nome da classe: Account.R contém o construtor account e seus métodos, Shape.R contém os genéricos shape. Nos desafios desta seção, seu código fica nesses arquivos, e main.R contém o código de entrada/saída fornecido, com as linhas source() já no início, na ordem correta. O editor mostra cada arquivo em uma aba.
Shape.R # funções genéricas compartilhadas por todas as formas: carregue este arquivo primeiro
Circle.R # a classe de círculo e seus métodos
main.R # source("Shape.R"); source("Circle.R"); lê a entrada e imprime os resultadossource() executa um arquivo no ambiente global, então suas funções e variáveis se tornam nomes globais. R não tem nomes privados de arquivo: se dois arquivos definirem helper(), prevalece o arquivo carregado por último com source(). Um valor em sua própria linha em um arquivo carregado com source() também não é impresso, então arquivos que devem exibir algo chamam cat():
# Tools.R
total <- 0 # uma variável global após a execução com source()
42 # não é exibido por source()
helper <- function(x) x * 2
# Other.R
helper <- function(x) x + 1 # carregado depois com source(): substitui o helper acimaDesafio
FácilO programa tem dois arquivos. main.R carrega Greeting.R, lê nomes e imprime o resultado de greeting(name) para cada um. Complete greeting() em Greeting.R para que retorne Hello, Ada! para o nome Ada, ou Hello, friend! quando o nome estiver vazio.
Seu código deve ficar em Greeting.R. main.R contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
source("Greeting.R")
# Código de entrada/saída fornecido: mantenha-o como está
input <- suppressWarnings(readLines(file("stdin")))
for (name in input) cat(greeting(name), "\n", sep = "")
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Fundamentos do S3
Trabalhando com ArquivosListas com uma ClasseFunções ConstrutorasMétodos de Impressão e FormataçãoValidadores e AuxiliaresRevisão - Temperaturas4Encapsulamento em R
Closures como ObjetosAmbientes como ObjetosFunções de AcessoProtegendo o EstadoRecapitulação - Parquímetro2Genéricos e Métodos S3
Genéricos e UseMethodMétodos padrãoMétodos para genéricos baseFundamentos de NextMethodRevisão - Áreas de formas5Classes S4
Definindo classes S4Slots e acessoVerificações de validadeMétodos showRevisão - Catálogo de produtos8Classes de Referência
Definindo Classes de ReferênciaMétodos e Atualizações de CamposSemântica de CópiaHerança e callSuperRecapitulação — Fila de Tarefas11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Compilador de R online