4.4: Navegando por el Sistema de Archivos
- Page ID
- 151493
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)
( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\id}{\mathrm{id}}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\kernel}{\mathrm{null}\,}\)
\( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\)
\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\)
\( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)
\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)
\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)
\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vectorC}[1]{\textbf{#1}} \)
\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)
\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)
\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)En esta sección hablo un poco sobre cómo R interactúa con el sistema de archivos en su computadora. No es un tema terriblemente interesante, pero es útil. Como antecedente de esta discusión, hablaré un poco sobre cómo funcionan las ubicaciones del sistema de archivos en la Sección 4.4.1. Érase una vez que todos los que usaban computadoras podían asumir con seguridad que entendían cómo funcionaba el sistema de archivos, ¡porque era imposible usar con éxito una computadora si no lo hiciste! No obstante, los sistemas operativos modernos son mucho más “fáciles de usar”, y como consecuencia de esto hacen todo lo posible para ocultar el sistema de archivos a los usuarios. Entonces en estos días no es nada raro que las personas hayan usado computadoras la mayor parte de su vida y no estén familiarizadas con la forma en que las computadoras organizan los archivos. Si ya conoces estas cosas, salta directamente a la Sección 4.4.2. De lo contrario, sigue leyendo. Intentaré dar una breve introducción que será útil para aquellos de ustedes que nunca se han visto obligados a aprender a navegar por una computadora usando un shell DOS o UNIX.
sistema de archivos en sí
En esta sección describo la idea básica detrás de las ubicaciones de archivos y las rutas de archivo. Independientemente de si estás usando Windows, Mac OS o Linux, a cada archivo de la computadora se le asigna una dirección (bastante) legible por humanos, y cada dirección tiene la misma estructura básica: describe una ruta que comienza desde una ubicación raíz, a través de una serie de carpetas (o si eres un usuario de computadora de la vieja escuela, directorios), y finalmente termina en el archivo.
En una computadora con Windows la raíz es la unidad física 50 en la que se almacena el archivo, y para la mayoría de las computadoras domésticas el nombre del disco duro que almacena todos tus archivos es C: y por lo tanto la mayoría de los nombres de archivos en Windows comienzan con C:. Después de eso vienen las carpetas, y en Windows los nombres de las carpetas están separados por un símbolo\
. Entonces, el camino completo a este libro en mi computadora con Windows podría ser algo como esto:
C:\Users\danRbook\LSR.pdf
y lo que eso significa es que el libro se llama LSR.pdf, y está en una carpeta llamada libro
que a su vez está en una carpeta llamada dan que a su vez es... bueno, entiendes la idea. En los sistemas Linux, Unix y Mac OS, las direcciones se ven un poco diferentes, pero tienen un espíritu más o menos idéntico. En lugar de usar la barra diagonal inversa, las carpetas se separan mediante una barra diagonal, y a diferencia de Windows, no tratan la unidad física como la raíz del sistema de archivos. Entonces, el camino hacia este libro en mi Mac podría ser algo como esto:
/Users/dan/Rbook/LSR.pdf
Entonces eso es lo que queremos decir con la “ruta” a un archivo. El siguiente concepto a captar es la idea de un directorio de trabajo y cómo cambiarlo. Para aquellos de ustedes que han usado interfaces de línea de comandos anteriormente, esto ya debería ser obvio. Pero si no, esto es lo que quiero decir. El directorio de trabajo es simplemente “cualquier carpeta que esté viendo actualmente”. Supongamos que actualmente estoy buscando archivos en Explorer (si estás usando Windows) o usando Finder (en una Mac). La carpeta que actualmente tengo abierta es mi directorio de usuario (es decir, C:\Users\dan
o /Users/dan
). Ese es mi directorio de trabajo actual.
El hecho de que podamos imaginar que el programa está “en” un directorio en particular significa que podemos hablar de pasar de nuestra ubicación actual a una nueva. Lo que eso significa es que podríamos querer especificar una nueva ubicación en relación con nuestra ubicación actual. Para ello, necesitamos introducir dos nuevas convenciones. Independientemente del sistema operativo que estés usando, nosotros usamos. para hacer referencia al directorio de trabajo actual, y.. para hacer referencia al directorio anterior. Esto nos permite especificar una ruta a una nueva ubicación en relación con nuestra ubicación actual, como ilustran los siguientes ejemplos. Supongamos que estoy usando mi computadora con Windows, y mi directorio de trabajo es C:\Users\danRbook
). La siguiente tabla muestra varias direcciones en relación con mi actual:
Cuadro 4.1: Operaciones aritméticas básicas en R. Estos cinco operadores se utilizan con mucha frecuencia a lo largo del texto, por lo que es importante estar familiarizado con ellos desde el principio.
ruta absoluta (es decir, desde la raíz) | ruta relativa (es decir, de C:) |
C:\Users\dan | .. |
C:\Users | .. \ .. \ |
C:\Users\danRbook\source | . \ fuente |
C:\Users\dan\nerdstuff | .. \ nerdstuff |
Hay una última cosa a la que quiero llamar la atención: el directorio ~
. Normalmente no me molestaría, pero R hace referencia a este concepto a veces. Es bastante común en computadoras que tienen múltiples usuarios para definir ~
para que sea el directorio home del usuario. En mi Mac, por ejemplo, el directorio home ~
para el usuario “dan” es\ Usuarios\ dan\
. Y así, no en vano, es posible definir otros directorios en términos de su relación con el directorio home. Por ejemplo, una forma alternativa de describir la ubicación del archivo LSR.pdf
en mi Mac sería
~Rbook\LSR.pdf
Eso es todo lo que realmente necesitas saber sobre las rutas de archivos. Y como esta sección ya se siente demasiado larga, es momento de mirar cómo navegar por el sistema de archivos en R.
Navegar por el sistema de archivos usando la consola R
En esta sección voy a hablar sobre cómo navegar por este sistema de archivos desde dentro de la propia R. No es particularmente fácil de usar, por lo que probablemente te alegrará saber que Rstudio te proporciona un método más fácil, y lo describiré en la Sección 4.4.4. Entonces en la práctica, realmente no necesitarás usar los comandos sobre los que balbuceo en esta sección, pero sí creo que ayuda verlos en funcionamiento al menos una vez antes de olvidarlos para siempre.
Bien, comencemos. Cuando se quiere cargar o guardar un archivo en R es importante saber cuál es el directorio de trabajo. Puedes averiguarlo usando el comando getwd ()
. Por el momento, supongamos que estoy usando Mac OS o Linux, ya que hay algunas sutilezas en Windows. Esto es lo que sucede:
getwd()
## [1] "/Users/dan"
Podemos cambiar el directorio de trabajo con bastante facilidad usando setwd ()
. La función setwd ()
tiene solo un argumento, dir
, es una cadena de caracteres que especifica una ruta a un directorio, o una ruta relativa al directorio de trabajo. Dado que actualmente estoy ubicado en /Users/Dan
, los dos siguientes son equivalentes:
setwd("/Users/dan/Rbook/data")
setwd("./Rbook/data")
Ahora que estamos aquí, podemos escribir list.files ()
comando para obtener una lista de todos los archivos en ese directorio. Dado que este es el directorio en el que guardo todos los archivos de datos que usaremos en este libro, esto es lo que obtenemos como resultado:
list.files()
## [1] "afl24.Rdata" "aflsmall.Rdata" "aflsmall2.Rdata"
## [4] "agpp.Rdata" "all.zip" "annoying.Rdata"
## [7] "anscombesquartet.Rdata" "awesome.Rdata" "awesome2.Rdata"
## [10] "booksales.csv" "booksales.Rdata" "booksales2.csv"
## [13] "cakes.Rdata" "cards.Rdata" "chapek9.Rdata"
## [16] "chico.Rdata" "clinicaltrial_old.Rdata" "clinicaltrial.Rdata"
## [19] "coffee.Rdata" "drugs.wmc.rt.Rdata" "dwr_all.Rdata"
## [22] "effort.Rdata" "happy.Rdata" "harpo.Rdata"
## [25] "harpo2.Rdata" "likert.Rdata" "nightgarden.Rdata"
## [28] "nightgarden2.Rdata" "parenthood.Rdata" "parenthood2.Rdata"
## [31] "randomness.Rdata" "repeated.Rdata" "rtfm.Rdata"
## [34] "salem.Rdata" "zeppo.Rdata"
No terriblemente emocionante, lo admito, pero es útil conocerlo. En cualquier caso, solo hay una cosa más de la que quiero tomar nota, que es que R también hace uso del directorio home. Puedes averiguar qué es usando la función path.expand ()
, así:
path.expand("~")
## [1] "/Users/dan"
Puedes cambiar el directorio de usuarios si quieres, pero no vamos a hacer mucho uso de él así que no hay razón para hacerlo. La única razón por la que incluso me estoy molestando en mencionarlo es que cuando usas Rstudio para abrir un archivo, verás una salida en pantalla que define la ruta al archivo relativa al directorio #~#. Prefiero que no te confundas cuando lo veas. 51
las rutas de Windows usan la diagonal incorrecta?
Supongamos que estoy en Windows. Como antes, puedo averiguar cuál es mi directorio de trabajo actual así:
getwd()
## [1] "C:/Users/dan/
Esto parece correcto, pero quizás se esté preguntando por qué R está mostrando una ruta de Windows usando el tipo incorrecto de barra diagonal. La respuesta es un poco complicada, y tiene que ver con el hecho de que R trata al carácter\
como “especial” (ver Sección 7.8.7). Si estás profundamente concordado con la idea de especificar una ruta usando las barras de estilo Windows, entonces lo que necesitas hacer es escribir/
cuando quieras decir\
. Es decir, si quieres especificar el directorio de trabajo en una computadora con Windows, necesitas usar uno de los siguientes comandos:
setwd( "C:/Users/dan" )
setwd( "C:\\Users\\dan" )
Es un poco molesto tener que hacerlo de esta manera, pero como verás más adelante en la Sección 7.8.7 es un mal necesario. Afortunadamente, como veremos en la siguiente sección, Rstudio proporciona una forma mucho más sencilla de cambiar directorios...
Navegar por el sistema de archivos usando el panel de archivos de Rstudio
Aunque creo que es importante entender cómo funcionan todas estas cosas de la línea de comandos, en muchas (tal vez incluso la mayoría) situaciones hay una manera más fácil. Para nuestros propósitos, la forma más fácil de navegar por el sistema de archivos es hacer uso de las herramientas integradas de Rstudio. El panel “archivo” —el área inferior derecha en la Figura 4.7— es en realidad un navegador de archivos bastante decente. No solo puedes apuntar y hacer clic sobre los nombres para moverte por el sistema de archivos, también puedes usarlo para establecer el directorio de trabajo, e incluso cargar archivos.
Esto es lo que debe hacer para cambiar el directorio de trabajo usando el panel de archivos. Digamos que estoy mirando la pantalla real que se muestra en la Figura 4.7. En la parte superior del panel de archivos se ve algún texto que dice “Inicio > Rbook > datos”. Lo que eso significa es que está mostrando los archivos que están almacenados en el
/Users/dan/Rbook/data
directorio en mi computadora. No quiere decir que este sea el directorio de trabajo de R. Si desea cambiar el directorio de trabajo R, usando el panel de archivos, debe hacer clic en el botón que dice “Más”. Esto traerá un pequeño menú, y una de las opciones será “Establecer como Directorio de Trabajo”. Si selecciona esa opción, entonces R realmente cambiará el directorio de trabajo. Se puede decir que lo ha hecho porque este comando aparece en la consola:
setwd("~/Rbook/data")
Es decir, Rstudio envía un comando a la consola R, exactamente como si lo hubieras escrito tú mismo. El panel de archivos también se puede utilizar para hacer otras cosas. Si desea mover “arriba” a la carpeta principal (por ejemplo, de /Users/dan/rbook/data
a /usuarios/dan/rbook
haga clic en el enlace “..” en el panel de archivos. Para desplazarse a una subcarpeta, haga clic en el nombre de la carpeta que desea abrir. Puede abrir algunos tipos de archivo haciendo clic en ellos. Puedes eliminar archivos de tu computadora usando el botón “eliminar”, renombrarlos con el botón “renombrar”, y así sucesivamente.
Como puede ver, el panel de archivos es una pequeña herramienta muy útil para navegar por el sistema de archivos. Pero puede hacer algo más que navegar. Como veremos más adelante, se puede utilizar para abrir archivos. Y si miras los botones y opciones de menú que presenta, incluso puedes usarlo para renombrar, eliminar, copiar o mover archivos, y crear nuevas carpetas. Sin embargo, dado que la mayor parte de esa funcionalidad no es crítica para los objetivos básicos de este libro, te dejaré descubrirlos por tu cuenta.