Operaciones básicas en R

Por: Ludger O. Suarez-Burgoa (Universidad Nacional de Colombia) y Exneyder A. Montoya-Araque (Inteinsa S.A.).

Instrucciones básicas y tipos de estructuras

Usando R desde la consola como una calculadora

5+20    # suma (o resta)
[1] 25
5*2    # multiplicación
[1] 10
5/2    # división
[1] 2.5
5^2   # potencias
[1] 25
5%/%2    # division entera
[1] 2
5%%2    # residuo (módulo)
[1] 1
pi    # número pi
[1] 3.141593
exp(1)    # el numero e
[1] 2.718282
exp(3)    # e elevado a la 3
[1] 20.08554
sqrt(3)    # La raiz cuadrada de 3
[1] 1.732051
log(10)    # logaritmo neperiano de 3
[1] 2.302585
log(10, 3)    # logaritmo en base 3 de 10
[1] 2.095903
log(10, exp(1))    # logaritmo neperiano de 3
[1] 2.302585
cos(pi)    #  el coseno de pi   (revisar help("Trig"), ?Trig, ??Trig)
[1] -1

Tipos de variables

Numéricos

x <- 10.5      # Asigna un número con punto decimal a la variable de nombre x.
x              # Muestra el contenido del objeto x.
[1] 10.5
class(x)       # Muestra la clase del objeto x.
[1] "numeric"
typeof(x)      # Tipo genérico interno del R.
[1] "double"
y <- 10        # En general los números son reales.
y
[1] 10
class(y)
[1] "numeric"
typeof(y)
[1] "double"
is.integer(y)
[1] FALSE
# Asignar un entero
z <- as.integer(3) 
z              
[1] 3
class(z)  
[1] "integer"
typeof(z)
[1] "integer"
w <- 4L
w              
[1] 4
class(w)  
[1] "integer"
typeof(w)
[1] "integer"
is.integer(z)
[1] TRUE
is.integer(w)  
[1] TRUE

Complejos

z <- 1 + 2i 
z          
[1] 1+2i
class(z)   
[1] "complex"
typeof(z)
[1] "complex"
sqrt(-4) 
## Warning in sqrt(-4): NaNs produced
[1] NaN
sqrt(-4+0i)
[1] 0+2i
sqrt(as.complex(-4)) 
[1] 0+2i

Booleanos o lógicos

bool1 <- is.integer(10L)
bool1
[1] TRUE
class(bool1)  
[1] "logical"
typeof(bool1)
[1] "logical"
bool2 <- is.integer(10)
bool2
[1] FALSE
class(bool2)  
[1] "logical"
typeof(bool2)
[1] "logical"

Caracteres (strings)

x <- as.character(3.141592) 
x 
[1] "3.141592"
class(x)
[1] "character"
typeof(x)
[1] "character"
nombre <- "Pepito"
apellido <- "Perez" 
paste(nombre, apellido)
[1] "Pepito Perez"
cat(nombre, "\n", apellido, sep="")
## Pepito ## Perez

Vectores

v1 <- c(2, 3, 5)    #  asignar un vector a una variable
class(v1)
[1] "numeric"
typeof(v1)
[1] "double"
v2 <- c(TRUE, FALSE, TRUE, FALSE, FALSE) 
class(v2)
[1] "logical"
typeof(v2)
[1] "logical"
v3 <-  c("aa", "bb", "cc", "dd", "ee") 
class(v3)
[1] "character"
typeof(v3)
[1] "character"
n <- c(2, 3, 5) 
s <- c("aa", "bb", "cc", "dd", "ee") 
c(n, s)    # Concatenar 2 vectores
[1] "2"  "3"  "5"  "aa" "bb" "cc" "dd" "ee"
a <- c(1, 3, 5, 7) 
b <- c(1, 2, 4, 8)

5 * a    # Producto por una constante
[1]  5 15 25 35
a + b    # Suma elemento a elemento
[1]  2  5  9 15
a - b    # Resta elemento a elemento
[1]  0  1  1 -1
a * b    # Multiplica elemento a elemento
[1]  1  6 20 56
a / b    # Divide elemento a elemento
[1] 1.000 1.500 1.250 0.875
a%*%b    # Producto interno (producto punto o escalar)
##      [,1]
## [1,]   83
1*1+3*2+5*4+7*8
[1] 83
u <- c(10, 20, 30)
length(u)
[1] 3
v <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)
length(v)
[1] 9
u + v    # Operaciones elemento a elemento de forma cíclica si la longitud es diferente
[1] 11 22 33 14 25 36 17 28 39
s <- c("aa", "bb", "cc", "dd", "ee") 
s[3]
[1] "cc"
s[10]
[1] NA
s[c(2, 1, 3)] 
[1] "bb" "aa" "cc"
s[2:4]
[1] "bb" "cc" "dd"
meses <- c("enero", "enero", "febrero", "abril", "abril", "abril")
meses <- factor(meses)
meses
[1] enero   enero   febrero abril   abril   abril  
## Levels: abril enero febrero
as.integer(meses)
[1] 2 2 3 1 1 1
meses <- c("enero", "enero", "febrero", "abril", "abril", "abril")
meses <- factor(meses, labels=c("ABRIL", "ENERO", "FEBRERO"))
meses
[1] ENERO   ENERO   FEBRERO ABRIL   ABRIL   ABRIL  
## Levels: ABRIL ENERO FEBRERO
meses <- c("enero", "enero", "febrero", "abril", "abril", "abril")
meses <- factor(meses, levels = c("enero", "febrero", "abril"))
meses
[1] enero   enero   febrero abril   abril   abril  
## Levels: enero febrero abril
as.integer(meses)
[1] 1 1 2 3 3 3
meses <- c("enero", "enero", "febrero", "abril", "abril", "abril")
meses <- factor(meses, levels = c("enero", "febrero"))
meses
[1] enero   enero   febrero <NA>    <NA>    <NA>   
## Levels: enero febrero
as.integer(meses)
[1]  1  1  2 NA NA NA
# Por qué este código es un problema?
meses <- c("enero", "enero", "febrero", "abril", "abril", "abril")
meses <- factor(meses, labels = c("Enero", "Febrero", "Abril"))
meses
[1] Febrero Febrero Abril   Enero   Enero   Enero  
## Levels: Enero Febrero Abril
as.integer(meses)
[1] 2 2 3 1 1 1
# Una mejor forma
meses <- c("enero", "enero", "febrero", "abril", "abril", "abril")
meses <- factor(meses, levels = c("enero", "febrero", "abril"),
                labels = c("Enero", "Febrero", "Abril"))
meses
[1] Enero   Enero   Febrero Abril   Abril   Abril  
## Levels: Enero Febrero Abril
as.integer(meses)
[1] 1 1 2 3 3 3

Matrices

A <- matrix(c(2, 4, 3, 1, 5, 7), nrow=2, ncol=3, byrow = TRUE)   # Asignar una matriz por filas
A
##      [,1] [,2] [,3]
## [1,]    2    4    3
## [2,]    1    5    7
A[2, 3]
[1] 7
A[2, ] 
[1] 1 5 7
A[, 3]
[1] 3 7
dimnames(A) = list( 
     c("fila1", "fila2"),        
     c("col1", "col2", "col3"))
A
##       col1 col2 col3
## fila1    2    4    3
## fila2    1    5    7
A["fila2", "col3"]
[1] 7
B <- matrix(c(2, 4, 3, 1, 5, 7), nrow=3, ncol=2)    # Asignar una matriz por columnas
B
##      [,1] [,2]
## [1,]    2    1
## [2,]    4    5
## [3,]    3    7
t(B)    # traspuesta
##      [,1] [,2] [,3]
## [1,]    2    4    3
## [2,]    1    5    7
C <- matrix(c(7, 4, 2), nrow=3, ncol=1) 
C 
##      [,1]
## [1,]    7
## [2,]    4
## [3,]    2
cbind(B, C)
##      [,1] [,2] [,3]
## [1,]    2    1    7
## [2,]    4    5    4
## [3,]    3    7    2
D <- matrix(c(6, 2), nrow=1,  ncol=2) 
D 
##      [,1] [,2]
## [1,]    6    2
rbind(B, D)
##      [,1] [,2]
## [1,]    2    1
## [2,]    4    5
## [3,]    3    7
## [4,]    6    2
c(B)    # convierte la matriz B en un vector reciendo las columnas
[1] 2 4 3 1 5 7

Listas

n <- c(2, 3, 5) 
s <- c("aa", "bb", "cc", "dd", "ee") 
b <- c(TRUE, FALSE, TRUE, FALSE, FALSE) 
x <- list(n, s, b, 3)
 
x[2]
## [[1]]
[1] "aa" "bb" "cc" "dd" "ee"
x[c(2, 4)]
## [[1]]
[1] "aa" "bb" "cc" "dd" "ee"
## 
## [[2]]
[1] 3
x[[2]]
[1] "aa" "bb" "cc" "dd" "ee"
x[[2]] <- "ta"
s
[1] "aa" "bb" "cc" "dd" "ee"
v <- list(numeros=c(2, 3, 5),
          nombres=c("aa", "bb"))    # Lista nombrada
v 
## $numeros
[1] 2 3 5
## 
## $nombres
[1] "aa" "bb"
v["numeros"]
## $numeros
[1] 2 3 5
v[c("nombres", "numeros")]
## $nombres
[1] "aa" "bb"
## 
## $numeros
[1] 2 3 5
v[["numeros"]]
[1] 2 3 5
v$numeros
[1] 2 3 5

Marco de datos (data frame)

n <- c(2, 3, 5) 
s <- c("aa", "bb", "cc") 
b <- c(TRUE, FALSE, TRUE) 
df <- data.frame(n, s, b)
df
##   n  s     b
## 1 2 aa  TRUE
## 2 3 bb FALSE
## 3 5 cc  TRUE
mtcars
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
head(mtcars)
##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
mtcars[1, 4]
[1] 110
mtcars["Mazda RX4", "hp"]
[1] 110
mtcars[[1]]
##  [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2
## [15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4
## [29] 15.8 19.7 15.0 21.4
mtcars[["mpg"]]
##  [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2
## [15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4
## [29] 15.8 19.7 15.0 21.4
mtcars$mpg
##  [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2
## [15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4
## [29] 15.8 19.7 15.0 21.4
mtcars[, "mpg"]
##  [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2
## [15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4
## [29] 15.8 19.7 15.0 21.4
mtcars["mpg"]
##                      mpg
## Mazda RX4           21.0
## Mazda RX4 Wag       21.0
## Datsun 710          22.8
## Hornet 4 Drive      21.4
## Hornet Sportabout   18.7
## Valiant             18.1
## Duster 360          14.3
## Merc 240D           24.4
## Merc 230            22.8
## Merc 280            19.2
## Merc 280C           17.8
## Merc 450SE          16.4
## Merc 450SL          17.3
## Merc 450SLC         15.2
## Cadillac Fleetwood  10.4
## Lincoln Continental 10.4
## Chrysler Imperial   14.7
## Fiat 128            32.4
## Honda Civic         30.4
## Toyota Corolla      33.9
## Toyota Corona       21.5
## Dodge Challenger    15.5
## AMC Javelin         15.2
## Camaro Z28          13.3
## Pontiac Firebird    19.2
## Fiat X1-9           27.3
## Porsche 914-2       26.0
## Lotus Europa        30.4
## Ford Pantera L      15.8
## Ferrari Dino        19.7
## Maserati Bora       15.0
## Volvo 142E          21.4
mtcars[1]
##                      mpg
## Mazda RX4           21.0
## Mazda RX4 Wag       21.0
## Datsun 710          22.8
## Hornet 4 Drive      21.4
## Hornet Sportabout   18.7
## Valiant             18.1
## Duster 360          14.3
## Merc 240D           24.4
## Merc 230            22.8
## Merc 280            19.2
## Merc 280C           17.8
## Merc 450SE          16.4
## Merc 450SL          17.3
## Merc 450SLC         15.2
## Cadillac Fleetwood  10.4
## Lincoln Continental 10.4
## Chrysler Imperial   14.7
## Fiat 128            32.4
## Honda Civic         30.4
## Toyota Corolla      33.9
## Toyota Corona       21.5
## Dodge Challenger    15.5
## AMC Javelin         15.2
## Camaro Z28          13.3
## Pontiac Firebird    19.2
## Fiat X1-9           27.3
## Porsche 914-2       26.0
## Lotus Europa        30.4
## Ford Pantera L      15.8
## Ferrari Dino        19.7
## Maserati Bora       15.0
## Volvo 142E          21.4
mtcars[c("mpg", "hp")]
##                      mpg  hp
## Mazda RX4           21.0 110
## Mazda RX4 Wag       21.0 110
## Datsun 710          22.8  93
## Hornet 4 Drive      21.4 110
## Hornet Sportabout   18.7 175
## Valiant             18.1 105
## Duster 360          14.3 245
## Merc 240D           24.4  62
## Merc 230            22.8  95
## Merc 280            19.2 123
## Merc 280C           17.8 123
## Merc 450SE          16.4 180
## Merc 450SL          17.3 180
## Merc 450SLC         15.2 180
## Cadillac Fleetwood  10.4 205
## Lincoln Continental 10.4 215
## Chrysler Imperial   14.7 230
## Fiat 128            32.4  66
## Honda Civic         30.4  52
## Toyota Corolla      33.9  65
## Toyota Corona       21.5  97
## Dodge Challenger    15.5 150
## AMC Javelin         15.2 150
## Camaro Z28          13.3 245
## Pontiac Firebird    19.2 175
## Fiat X1-9           27.3  66
## Porsche 914-2       26.0  91
## Lotus Europa        30.4 113
## Ford Pantera L      15.8 264
## Ferrari Dino        19.7 175
## Maserati Bora       15.0 335
## Volvo 142E          21.4 109
mtcars[24, ]
##             mpg cyl disp  hp drat   wt  qsec vs am gear carb
## Camaro Z28 13.3   8  350 245 3.73 3.84 15.41  0  0    3    4
mtcars["Camaro Z28", ]
##             mpg cyl disp  hp drat   wt  qsec vs am gear carb
## Camaro Z28 13.3   8  350 245 3.73 3.84 15.41  0  0    3    4
mtcars[c(3, 24), ]
##             mpg cyl disp  hp drat   wt  qsec vs am gear carb
## Datsun 710 22.8   4  108  93 3.85 2.32 18.61  1  1    4    1
## Camaro Z28 13.3   8  350 245 3.73 3.84 15.41  0  0    3    4
mtcars[c("Datsun 710", "Camaro Z28"), ]
##             mpg cyl disp  hp drat   wt  qsec vs am gear carb
## Datsun 710 22.8   4  108  93 3.85 2.32 18.61  1  1    4    1
## Camaro Z28 13.3   8  350 245 3.73 3.84 15.41  0  0    3    4
L = mtcars$am == 0
L
##  [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [12]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE
## [23]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
mtcars[L, ]
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2

Operaciones con secuencias y repeticiones

Secuencias

1:20
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
3:9
[1] 3 4 5 6 7 8 9
10:2
[1] 10  9  8  7  6  5  4  3  2
seq(2, 15)
##  [1]  2  3  4  5  6  7  8  9 10 11 12 13 14 15
seq(2, 15, 2)
[1]  2  4  6  8 10 12 14
seq(2, 15, length.out=6)
[1]  2.0  4.6  7.2  9.8 12.4 15.0

Repeticiones

rep(c(1, 3, 2), 3)
[1] 1 3 2 1 3 2 1 3 2
rep(c(1, 3, 2), times = 3)
[1] 1 3 2 1 3 2 1 3 2
rep(c(1, 3, 2), each = 3)
[1] 1 1 1 3 3 3 2 2 2
rep(c(1, 3, 2), len = 10)
##  [1] 1 3 2 1 3 2 1 3 2 1
rep(c(1, 3, 2), each = 4, len = 10)
##  [1] 1 1 1 1 3 3 3 3 2 2

Condicionales (estructuras de decisión)

x <- sample(1:10, 1)
if (x > 5) { 
  y <- 10}
else { 
  y <- 0}
[1] 8
print(y)
[1] 10

O en un sola línea y asignándolo a una variable.

y <- if (x > 3) {10} else {0}
print(y)
[1] 10

Ciclos (estructuras de repetición)

Ciclos definidos por una secuencia finita (for)

x <- c("a", "b", "c", "d")
# Usando los índices
for (i in 1:6) {
  print(x[i])
}
[1] "a"
[1] "b"
[1] "c"
[1] "d"
[1] NA
[1] NA
# Usando directamente los elementos
for (letter in x) {
  print(letter)
}
[1] "a"
[1] "b"
[1] "c"
[1] "d"
x <- matrix(1:6, 2, 3)
# Recorriendo una matriz
for (i in seq_len(nrow(x))) {
  for (j in seq_len(ncol(x))) {
    print(x[i,j])
  }
}
[1] 1
[1] 3
[1] 5
[1] 2
[1] 4
[1] 6

Ciclos definidos por una condición (while)

count <- 5
while (count < 10) {
 print(count)
 count <- count + 1
}
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
z <- 5
while (z >= 3 && z <= 10) {
  print(z)
  coin <- rbinom(1,1,0.5)
  if (coin == 1) {
    z <- z + 1 }
  else {
    z <- z - 1 }   
}
[1] 5
[1] 4
[1] 5
[1] 4
[1] 5
[1] 4
[1] 3

Funciones

Para definir una función en R se debe seguir la siguiente plantilla:

nombreDeLaFuncion <- function (argumentos) {
  Cálculos con los argumentos de la función.
  Series de instrucciones en R.
  Asignación de variables.
}
# Definción de una función simple
miPrimeraFuncion <-function (n) {
  # Calcula el cuadrado de un número.
  n * n
}
# Uso de la función.
k <- 10
miPrimeraFuncion (k)
[1] 100
# otra función
funcion1 <- function (algunTexto){
    a <- paste("se ingresa:", algunTexto)
    print(a)
}
x <- 123
funcion1(x)
[1] "se ingresa: 123"
# Definción de una función simple
miPrimeraFuncion <-function(n) {
  # Calcula el cuadrado de un número.
  resultado <- n * n
  return(resultado)
}
k <- 5
m <- miPrimeraFuncion(k)
print (m)
[1] 25

fcorrecta <- function (x, y) {
    # Define una función de dos argumentos y múltiples salidas
    # almacenadas en un vector.
    z1 <- 2 * x + y
    z2 <- x + 2 * y
    z3 <- 2 * x + 2 * y
    z4 <- x / y
    return(c(z1, z2, z3, z4))
}

r1 <- fcorrecta(1, 2)
print(r1)
[1] 4.0 5.0 6.0 0.5

Si se retorna elementos más complejos es convenviente devolverlo en forma de lista.


f2 <- function(x, y) {
    # Definción de una función de dos argumentos y múltiples salidas
    # almacenadas en un lista.
    z1 <- x + y
    z2 <- x + 2 * y
    return(list(z1, z2))
}

print(f2(2, 5))

[[1]]
[1] 7

[[2]]
[1] 12
f2(2, 5)[[2]]
[1] 12
f2(2, 5)$z1
## NULL

Talleres

Taller 1, sobre la aplicación de las funciones básicas de R.