3.4: Almacenamiento de un número como variable
- Page ID
- 151372
\( \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}\)Una de las cosas más importantes para poder hacer en R (o cualquier lenguaje de programación, para el caso) es almacenar información en variables. Las variables en R no son exactamente lo mismo que las variables de las que hablamos en el último capítulo sobre métodos de investigación, pero son similares. A nivel conceptual se puede pensar en una variable como etiqueta para cierta pieza de información, o incluso varias piezas diferentes de información. Al hacer análisis estadísticos en R todos tus datos (las variables que midiste en tu estudio) se almacenarán como variables en R, pero también verás más adelante en el libro encontrarás que terminas creando variables para otras cosas también. Sin embargo, antes de profundizar en todos los detalles desordenados de los conjuntos de datos y el análisis estadístico, veamos los conceptos básicos de cómo creamos variables y trabajamos con ellas.
Asignación de variables usando <
->
Como hemos estado trabajando con números hasta ahora, comencemos por crear variables para almacenar nuestros números. Y como a la mayoría de la gente le gustan los ejemplos concretos, inventemos uno. Supongamos que estoy tratando de calcular cuánto dinero voy a ganar con este libro. Hay varios números diferentes que podría querer almacenar. En primer lugar, tengo que averiguar cuántas copias venderé. Esto no es exactamente Harry Potter, así que supongamos que sólo voy a vender una copia por alumno de mi clase. Eso son 350 ventas, así que vamos a crear una variable llamada ventas
. Lo que quiero hacer es asignar un valor a mis ventas
variables, y ese valor debe ser 350
. Esto lo hacemos usando el operador de asignación, que es <-
. Así es como lo hacemos:
sales <- 350
Cuando pulsas enter, R no imprime ninguna salida. 23 Simplemente te da otro símbolo del sistema. No obstante, detrás de escena R ha creado una variable llamada ventas
y le ha dado un valor de 350
. Puedes comprobar que esto ha ocurrido pidiéndole a R que imprima la variable en pantalla. Y la forma más sencilla de hacerlo es escribir el nombre de la variable y darle click a enter 24.
sales
## [1] 350
Así que es agradable saberlo. Cada vez que no puedas recordar lo que R tiene almacenado en una variable en particular, simplemente puedes escribir el nombre de la variable y pulsar enter.
Bien, entonces ahora sabemos cómo asignar variables. En realidad, hay un poco más que deberías saber. En primer lugar, una de las características curiosas de R es que existen varias formas diferentes de hacer asignaciones. Además del operador <-
, también podemos usar ->
y =
, y es bastante importante entender las diferencias entre ellos. 25 Empecemos por considerar ->
, ya que ese es el más fácil (discutiremos el uso de =
en la Sección 3.5.1. Como cabría esperar con solo mirar el símbolo, es casi idéntico a <-
. Es solo que la flecha (es decir, la asignación) va de izquierda a derecha. Entonces, si quisiera definir mi variable de ventas
usando ->
, la escribiría así:
350 -> sales
Esto tiene el mismo efecto: y todavía significa que sólo voy a vender 350
copias. Suspiro. Aparte de esta diferencia superficial, <-
y ->
son idénticos. De hecho, en lo que a R se refiere, en realidad son el mismo operador, solo en una “forma izquierda” y una “forma correcta”. 26
Hacer cálculos usando variables
Bien, volvamos a mi historia original. En mi búsqueda por enriquecerme, he escrito este libro de texto. Para averiguar qué tan buena es una estrategia, he empezado a crear algunas variables en R. Además de definir una variable de ventas
que cuente el número de copias que voy a vender, también puedo crear una variable llamada royalty
, indicando cuánto dinero obtengo por copia. Digamos que mis regalías son alrededor de $7 por libro:
sales <- 350
royalty <- 7
Lo bueno de las variables (de hecho, el punto de tener variables) es que podemos hacer cualquier cosa con una variable que deberíamos poder hacer con la información que almacena. Es decir, ya que R me permite multiplicar 350
por 7
350 * 7
## [1] 2450
también me permite multiplicar las ventas
por regalías
sales * royalty
## [1] 2450
En lo que a R se refiere, el comando ventas * royalties
es el mismo que el comando 350 * 7
. No es sorprendente que pueda asignar la salida de este cálculo a una nueva variable, a la que llamaré ingresos
. Y cuando hacemos esto, el nuevo ingreso
variable obtiene el valor 2450
. Entonces hagamos eso, y luego hagamos que R imprima el valor de los ingresos
para que podamos verificar que se ha hecho lo que pedimos:
revenue <- sales * royalty
revenue
## [1] 2450
Eso es bastante sencillo. Una cosa un poco más sutil que podemos hacer es reasignar el valor de mi variable, en base a su valor actual. Por ejemplo, supongamos que a uno de mis alumnos (sin duda bajo la influencia de las drogas psicotrópicas) le encanta tanto el libro que me dona 550 dólares extra. La forma más sencilla de capturar esto es mediante un comando como este:
revenue <- revenue + 550
revenue
## [1] 3000
En este cálculo, R ha tomado el antiguo valor de ingresos
(es decir, 2450) y sumado 550 a ese valor, produciendo un valor de 3000. Este nuevo valor se asigna a la variable ingreso
, sobrescribiendo su valor anterior. En cualquier caso, ahora sabemos que estoy esperando ganar $3000 de esto. Bastante dulce, pienso para mí mismo. O al menos, eso es lo que pienso hasta que haga algunos cálculos más y resuelva cómo se ve el salario por hora implícito que estoy haciendo de esto.
Reglas y convenciones para nombrar variables
En los ejemplos que hemos visto hasta ahora, mis nombres de variables (ventas
e ingresos
) solo han sido palabras en inglés escritas con letras minúsculas. Sin embargo, R permite mucha más flexibilidad a la hora de nombrar tus variables, como lo ilustra la siguiente lista de reglas 27:
- Los nombres de variables solo pueden usar los caracteres alfabéticos en mayúsculas
A
-Z
así como los caracteres minúsculosa
-z
. También puede incluir caracteres numéricos0
-9
en el nombre de la variable, así como el punto.
o subrayado_
carácter. En otras palabras, puedes usarsal.e_s
como nombre de variable (aunque no puedo pensar por qué querrías), pero ¿no puedes usarSales?
. - Los nombres de variables no pueden incluir espacios: por lo tanto
mis ventas
no son un nombre válido, sinomi.sales
sí. - Los nombres de variables distinguen entre mayúsculas y minúsculas: es decir,
Ventas
yventas
son nombres de variables diferentes. - Los nombres de las variables deben comenzar con una letra o un punto. No se puede usar algo como
_sales
o1sales
como nombre de variable. Puedes usar.sales
como nombre de variable si quieres, pero no suele ser una buena idea. Por convención, las variables que comienzan con a.
se utilizan para fines especiales, por lo que debe evitar hacerlo. - Los nombres de variables no pueden ser una de las palabras clave reservadas. Estos son nombres especiales que R necesita para mantener “a salvo” de nosotros meros usuarios, por lo que no puedes usarlos como nombres de variables. Las palabras clave son:
if
,else
,repeat
,while
,function
,for
,in
,next
,break
,TRUE
,FALSO
,NULL
,Inf
,NaN
,NA
, Rtextverb #NA_integer_ #, Rtextverb #NA_real_ #,Na_Complex_
, y finalmente,Na_Character_
. No te sientas especialmente obligado a memorizar estos: si cometes un error e intentas usar una de las palabras clave como nombre de variable, R se quejará de ello como el pequeño autómata quejoso que es.
Además de esas reglas que R impone, existen algunas convenciones informales que la gente tiende a seguir a la hora de nombrar variables. Uno de ellos ya has visto: es decir, no uses variables que comiencen con un punto. Pero hay varios otros. No estás obligado a seguir estas convenciones, y hay muchas situaciones en las que es recomendable ignorarlas, pero generalmente es una buena idea seguirlas cuando puedas:
- Utilice nombres de variables informativas. Como regla general, se prefiere usar nombres significativos como
ventas
eingresos
sobre los arbitrarios comovariable1
yvariable2
. De lo contrario, es muy difícil recordar cuál es el contenido de las diferentes variables, y se vuelve difícil entender lo que realmente hacen tus comandos. - Utilice nombres cortos de variables. Escribir es un dolor y a nadie le gusta hacerlo. Así que preferimos usar un nombre como
ventas
sobre un nombre comoventas.for.this.book.that.you.are.reading
. Obviamente hay un poco de tensión entre usar nombres informativos (que tienden a ser largos) y usar nombres cortos (que tienden a no tener sentido), así que usa un poco de sentido común al negociar estas dos convenciones. - Utilice uno de los estilos de nomenclatura convencionales para nombres de variables de varias palabras. Supongamos que quiero nombrar una variable que almacene “mi nuevo salario”. Obviamente no puedo incluir espacios en el nombre de la variable, entonces, ¿cómo debo hacer esto? Hay tres convenciones diferentes que a veces ves emplear a los usuarios de R. En primer lugar, puedes separar las palabras usando periodos, lo que te daría
mi.nuevo.salario
como el nombre de la variable. Alternativamente, podrías separar palabras usando guiones bajos, como enmy_new_salary
. Por último, podrías usar letras mayúsculas al inicio de cada palabra (excepto la primera), lo que te daMyNewSalary como el
nombre de la variable. No creo que haya ninguna razón fuerte para preferir una a la otra, 28 pero es importante ser consistente.