Saltar al contenido principal

3.7: Almacenar muchos números como vector

$$\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 este punto hemos cubierto funciones con suficiente detalle para que podamos pasar de manera segura a través de los siguientes capítulos (con una pequeña excepción: ver Sección 4.11, así que volvamos a nuestra discusión sobre las variables. Cuando introduje variables en la Sección3.4 te mostré cómo podemos usar variables para almacenar un solo número. En esta sección, ampliaremos esta idea y veremos cómo almacenar varios números dentro de una variable. En R, el nombre de una variable que puede almacenar múltiples valores es un vector. Así que vamos a crear uno.

Crear un vector

Vamos a ceñirme a mi tonto ejemplo de “hacerse rico rápido escribiendo libros de texto”. Supongamos que la compañía de libros de texto (si realmente tuviera uno, es decir) me envía datos de ventas mensualmente. Desde que mi clase comienza a fines de febrero, podríamos esperar que la mayoría de las ventas se produzcan hacia el inicio del año. Supongamos que tengo 100 ventas en febrero, 200 ventas en marzo y 50 ventas en abril, y ninguna otra venta para el resto del año. Lo que me gustaría hacer es tener una variable —llamémoslo ventas.por.mes — que almacene todos estos datos de ventas. El primer número almacenado debe ser 0 ya que no tuve ventas en enero, el segundo debería ser 100, y así sucesivamente. La forma más sencilla de hacer esto en R es usar la función combine, c (). Para ello, todo lo que tenemos que hacer es escribir todos los números que quieras almacenar en una lista separada por comas, así: 35

sales.by.month <c(0, 100, 200, 50, 0, 0, 0, 0, 0, 0, 0, 0)
sales.by.month
##  [1]   0 100 200  50   0   0   0   0   0   0   0   0

Para usar la terminología correcta aquí, tenemos una sola variable aquí llamada sales.by.month: esta variable es un vector que consta de 12 elementos.

digresión práctica

Ahora que hemos aprendido a poner información en un vector, lo siguiente que debemos entender es cómo sacar esa información de nuevo. No obstante, antes de hacerlo merece la pena tomar un ligero desvío. Si has estado siguiendo, escribiendo todos los comandos en R tú mismo, es posible que la salida que viste cuando imprimimos el vector sales.by.month fuera ligeramente diferente a la que mostré anteriormente. Esto hubiera ocurrido si la ventana (o el panel RStudio) que contiene la consola R es realmente, muy estrecha. Si ese fuera el caso, es posible que haya visto una salida que se parece a esto:

sales.by.month
##  [1]   0 100 200  50   0   0   0   0   0   0   0   0

Debido a que no había mucho espacio en la pantalla, R ha impreso los resultados en dos líneas. Pero eso no es lo importante a notar. El punto importante es que la primera línea tiene un [1] delante de ella, mientras que la segunda línea comienza con [9]. Está bastante claro lo que está pasando aquí. Para la primera fila, R ha impreso el primer elemento hasta el octavo elemento, por lo que inicia esa fila con un [1]. Para la segunda fila, R ha impreso el noveno elemento del vector hasta la duodécima, y así comienza esa fila con un [9] para que puedas saber dónde está de un vistazo. Puede parecerle un poco extraño que R haga esto, pero de alguna manera es una amabilidad, ¡especialmente cuando se trata de conjuntos de datos más grandes!

Obtener información de vectores

Para volver a la historia principal, consideremos el problema de cómo obtener información de un vector. En este punto, podría tener una sospecha furtiva de que la respuesta tiene algo que ver con las [1] y [9] cosas que R ha estado imprimiendo. Y claro que tienes razón. Supongamos que solo quiero sacar los datos de ventas de febrero. Febrero es el segundo mes del año, así que probemos esto:

sales.by.month[2]
## [1] 100

Sí, esas son las ventas de febrero bien. Pero hay un detalle sutil que hay que tener en cuenta aquí: observe que R da salida [1] 100, no [2] 100. Esto se debe a que R está siendo extremadamente literal. Cuando escribimos ventas.por.mes [2], le pedimos a R que encontrara exactamente una cosa, y esa cosa pasa a ser el segundo elemento de nuestro vector ventas.por.mes. Entonces, cuando da salida [1] 100 lo que R está diciendo es que el primer número que acabamos de pedir es el 100. Este comportamiento tiene más sentido cuando te das cuenta de que podemos usar este truco para crear nuevas variables. Por ejemplo, podría crear una variable february.sales como esta:

february.sales <sales.by.month[2]
february.sales
## [1] 100

Obviamente, la nueva variable february.sales solo debe tener un elemento y así cuando la imprima esta nueva variable, la salida R comienza con un [1] porque 100 es el valor del primer (y único) elemento de february.sales. El hecho de que esto también pase a ser el valor del segundo elemento de ventas.por.mes es irrelevante. En breve volveremos a recoger este tema (Sección3.10.

Alterar los elementos de un vector

A veces querrás cambiar los valores almacenados en un vector. Imagina mi sorpresa cuando el editor me llama para decirme que los datos de ventas de May están equivocados. En realidad había 25 libros adicionales vendidos en mayo, pero hubo un error o algo así que no me lo habían dicho. ¿Cómo puedo arreglar mi variable sales.by.month? Una posibilidad sería asignar el vector completo nuevamente desde el principio, usando c (). Pero eso es mucho mecanografiar. Además, es un poco derrochador: ¿por qué debería R tener que redefinir las cifras de ventas para los 12 meses, cuando solo el 5to está equivocado? Afortunadamente, podemos decirle a R que cambie solo el 5to elemento, usando este truco:

sales.by.month[5] <25
sales.by.month
##  [1]   0 100 200  50  25   0   0   0   0   0   0   0

Otra forma de editar variables es usar las funciones edit () o fix (). No voy a discutirlos a detalle en este momento, pero puedes comprobarlos por tu cuenta.

Cosas útiles para saber sobre vectores

Antes de seguir adelante, quiero mencionar un par de cosas más sobre los vectores. En primer lugar, a menudo te encuentras queriendo saber cuántos elementos hay en un vector (generalmente porque te has olvidado). Puedes usar la función length () para hacer esto. Es bastante sencillo:

length( x = sales.by.month )
## [1] 12

En segundo lugar, a menudo se quiere alterar todos los elementos de un vector a la vez. Por ejemplo, supongamos que quería averiguar cuánto dinero ganaba en cada mes. Ya que estoy ganando unos emocionantes \$7 por libro (no en serio, eso en realidad está bastante cerca de lo que los autores obtienen en los libros de texto muy caros que se espera que compres), lo que quiero hacer es multiplicar cada elemento en el vector ventas.por.mes por 7. R lo hace bastante fácil, como muestra el siguiente ejemplo:

sales.by.month * 7
##  [1]    0  700 1400  350  175    0    0    0    0    0    0    0

En otras palabras, cuando multiplicas un vector por un solo número, todos los elementos del vector se multiplican. Lo mismo ocurre con la suma, resta, división y toma de poderes. Así que eso está limpio. Por otro lado, supongamos que quería saber cuánto dinero estaba ganando por día, en lugar de por mes. Ya que no todos los meses tienen el mismo número de días, necesito hacer algo ligeramente diferente. En primer lugar, voy a crear dos nuevos vectores:

days.per.month <c(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
profit <sales.by.month * 7

Obviamente, la variable profit es la misma que creamos anteriormente, y la variable days.per.month es bastante sencilla. Lo que quiero hacer es dividir cada elemento de ganancia por el elemento correspondiente de days.per.month. Nuevamente, R hace esto bastante fácil:

profit / days.per.month

##  [1]  0.000000 25.000000 45.161290 11.666667  5.645161  0.000000  0.000000
##  [8]  0.000000  0.000000  0.000000  0.000000  0.000000

Todavía no me gustan todos esos ceros, pero eso no es lo que importa aquí. Observe que el segundo elemento de la salida es 25, porque R ha dividido el segundo elemento de ganancia (es decir, 700) por el segundo elemento de días.por.mes (es decir, 28). Del mismo modo, el tercer elemento de la salida es igual a 1400 dividido por 31, y así sucesivamente. Hablaremos más sobre cálculos que involucran vectores más adelante (y en particular una cosa llamada la “regla del reciclaje”; Sección 7.12.2, pero eso es suficiente detalle por ahora.

This page titled 3.7: Almacenar muchos números como vector is shared under a CC BY-SA 4.0 license and was authored, remixed, and/or curated by Danielle Navarro via source content that was edited to the style and standards of the LibreTexts platform.