34 R, ambiente e o sistema de arquivos

O R pode interagir com o sistema de arquivos e o sistema operacional. Nesta seção vamos ver algumas das funcionalidades que informam sobre o ambiente de trabalho no R e também utilidades que podem facilitar o manuseio do programa.

Algumas implementações podem ser específicas para cada sistema operacional (SO). Por exemplo o diretório de trabalho ("workspace") pode ser definido via menu no Windows. Entretanto vamos aqui dar preferência a funções que independem do SO. Os exemplos a seguir foram rodados em LINUX mas também podem ser usados em outros SO.

34.1 Ambiente de trabalho

Informações detalhadas sobre a versão do R e plataforma (sistema operacional) são retornadas pelo objeto abaixo. Note que é sempre útil informar a saída deste objeto quando utilizando listas de emails do projeto. As saídas retornadas na forma de uma list podem ainda ser úteis para escrever programas/rotinas que dependam destas informações

> R.version

               _ 
platform       x86_64-pc-linux-gnu 
arch           x86_64 
os             linux-gnu 
system         x86_64, linux-gnu 
status 
major          4 
minor          6.1 
year           2026 
month          06 
day            24 
svn rev        90187 
language       R 
version.string R version 4.6.1 (2026-06-24) 
nickname       Happy Hop

Outros comandos relevantes sobre o sistema e recursos, cuja saída não mostramos aqui incluem:

Outro comando útil é sessionInfo() que informa sobre o sistema operacional e locales (linguagem utilizada pelo sistema), a versão do R, pacotes carregados e também os recursos (pacotes) disponíveis. As saídas das funções mencionadas podem ser usadas quando informando/reportando problemas encontrados em aplicações e/ou quando escrevendo funções que possuam funcionalidades e opções que dependam destas informações.

> sessionInfo()

R version 4.6.1 (2026-06-24) 
Platform: x86_64-pc-linux-gnu 
Running under: Ubuntu 24.04.4 LTS 
 
Matrix products: default 
BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.0 
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.0  LAPACK version 3.12.0 
 
locale: 
 [1] LC_CTYPE=pt_BR.UTF-8       LC_NUMERIC=C               LC_TIME=pt_BR.UTF-8 
 [4] LC_COLLATE=pt_BR.UTF-8     LC_MONETARY=pt_BR.UTF-8    LC_MESSAGES=pt_BR.UTF-8 
 [7] LC_PAPER=pt_BR.UTF-8       LC_NAME=C                  LC_ADDRESS=C 
[10] LC_TELEPHONE=C             LC_MEASUREMENT=pt_BR.UTF-8 LC_IDENTIFICATION=C 
 
time zone: America/Sao_Paulo 
tzcode source: system (glibc) 
 
attached base packages: 
[1] stats     graphics  grDevices utils     datasets  methods   base 
 
other attached packages: 
[1] knitr_1.51 
 
loaded via a namespace (and not attached): 
[1] compiler_4.6.1 cli_3.6.6      tools_4.6.1    otel_0.2.0     xfun_0.57 
[6] rlang_1.2.0    evaluate_1.0.5

34.2 Área de trabalho

Ao iniciar o R é aberta ou iniciada uma área de trabalho ("workspace") onde os objetos desta sessão poderão ser gravados. A localização "default"desta área de trabalho depende do sistema operacional, permissões etc. Por exemplo, no LINUX é o diretório de onde o R foi iniciado. No Windows é um diretório onde o R foi instalado.

Nos comandos a seguir mostramos como verificar qual o diretório de trabalho sendo usado, guardamos esta informação num objeto, verificamos qual o diretório onde o R foi instalado e como mudar o diretório de trabalho.

> getwd()

[1] "/home/paulojus/mateRial/aulasR/Rnw"

> wdir <- getwd() 
> wdir

[1] "/home/paulojus/mateRial/aulasR/Rnw"

> R.home()

[1] "/usr/lib/R"

> setwd(R.home()) 
> getwd()

[1] "/usr/lib/R"

> setwd(path.expand("~")) 
> getwd()

[1] "/home/paulojus"

O R automaticamente mantém um diretório temporário para uso em cada sessão e dentro deste um arquivo. As funções a seguir mostram como obter o caminho e nome do diretório e arquivo temporários.

> tempdir()

[1] "/tmp/RtmpHPhk0i"

> tempfile()

[1] "/tmp/RtmpHPhk0i/file74aef236f8e4c"

34.3 Manipulação de arquivos e diretórios

Há uma diversidade de funções para interagir com o diretórios e arquivos. Por exemplo dir() vai listar o conteúdo do diretório, e possui vários argumentos para seleção. Informações sobre cada elemento do diretório podem ser obtidas com file.info()

> getwd()

[1] "/home/paulojus/mateRial/aulasR/Rnw"

> dir("../")

 [1] "aulasR.aux"         "aulasR.bbl"         "aulasR.blg" 
 [4] "aulasR.log"         "aulasR.out"         "aulasR.pdf" 
 [7] "aulasR.tex"         "aulasR.tex~"        "codigoR" 
[10] "compila_rnw.sh"     "dados"              "ExSweave" 
[13] "figuras"            "Rembrapa.pdf"       "Rnw" 
[16] "Rplots.pdf"         "setup_knitr.R"      "tex" 
[19] "verifica_pacotes.R"

> setwd(R.home()) 
> dir()

[1] "bin"          "COPYING"      "etc"          "lib"          "library" 
[6] "modules"      "site-library" "SVN-REVISION"

> args(dir)

function (path = ".", pattern = NULL, all.files = FALSE, full.names = FALSE, 
    recursive = FALSE, ignore.case = FALSE, include.dirs = FALSE, 
    no.. = FALSE, fixed = FALSE) 
NULL

> file.info("bin")

    size isdir mode               mtime               ctime               atime uid 
bin 4096  TRUE  755 2026-08-31 10:51:23 2026-08-31 10:51:23 2026-09-08 21:31:50   0 
    gid uname grname 
bin   0  root   root

> file.info("bin")$isdir

[1] TRUE

> dir(path="bin")

 [1] "BATCH"         "build"         "check"         "COMPILE"       "config" 
 [6] "exec"          "INSTALL"       "javareconf"    "libtool"       "LINK" 
[11] "mkinstalldirs" "pager"         "R"             "Rcmd"          "Rd2pdf" 
[16] "Rdconv"        "Rdiff"         "REMOVE"        "Rprof"         "Rscript" 
[21] "rtags"         "SHLIB"         "Stangle"       "Sweave"

> dir(pattern="COPY")

[1] "COPYING"

> dir(path="doc")

character(0)

> dir(path="doc", full=TRUE)

character(0)

É possível efetuar operações do sistema operacional tais como criar, mover, copiar e remover arquivos e/ou diretórios a partir do R.

> setwd(path.expand("~")) 
> file.exists("foo.txt")

[1] TRUE

> file.create("foo.txt")

[1] TRUE

> file.exists("foo.txt")

[1] TRUE

> file.rename("foo.txt", "ap.txt")

[1] TRUE

> file.exists("foo.txt")

[1] FALSE

> file.exists(c("foo.txt","ap.txt"))

[1] FALSE  TRUE

> file.copy("ap.txt","foo.txt")

[1] TRUE

> file.exists(c("foo.txt","ap.txt"))

[1] TRUE TRUE

> file.remove("ap.txt")

[1] TRUE

> file.exists(c("foo.txt","ap.txt"))

[1]  TRUE FALSE

Da mesma forma é também possível criar e manipular diretórios. Note que a opção recursive=TRUE deve ser usada com muito cuidado pois apaga todo o conteúdo do diretório.

> getwd()

[1] "/home/paulojus/mateRial/aulasR/Rnw"

> dir.create("~/meu.dir") 
> file.copy("foo.txt", "~/meu.dir")

Warning in file.copy("foo.txt", "~/meu.dir"): problem copying ./foo.txt to /home/paulojus/meu.dir/foo.txt: Arquivo ou diretório inexistente

[1] FALSE

> dir("~/meu.dir")

character(0)

> unlink("~/meu.dir", recursive=TRUE) 
> setwd(wdir)     # retorna ao diretório de trabalho original

Os exemplos acima são na verdade funções que passam comandos para o sistema operacional, seja ele qual for. De forma mais geral comandos do sistema operacional podem ser executados diretamente do R com a função system(), mas a sintaxe do comando fica obviamente dependente do sistema operacional usado (linux, unix, Mac, etc). A seguir ilustramos comandos usados no LINUX. Uma opção interessante é dada pelo argumento intern = TRUE que faz com que o resultado do comando seja convertido num objeto do R, como no exemplo abaixo onde o objeto mdir passa a ser um vetor de caracteres com nomes de diretório de trabalho e mais abaixo o objeto arqs é um vetor com os nomes de todos os arquivos existentes no diretório de trabalho.

> system("pwd") 
> mdir <- system("pwd", intern=TRUE) 
> mdir 
> system("mkdir FStest.dir") 
> system("touch FStest.dir/arquivo.txt") 
> system("ls FStest.dir") 
> arqs <- system("ls d*.Rnw", intern=TRUE) 
> arqs 
> system("rm -rf FStest.dir")