R como calculadora
5+3
## [1] 8
15.3*23.4
## [1] 358.02
sqrt(16)
## [1] 4
Almacenado y nombres
producto=15.3*23.4
producto1<-15.3*23.4
Una vez que se guardan las variables, se las puede referenciar con otros operadores y funciones:
log(producto)
## [1] 5.880589
log10(producto)
## [1] 2.553907
<- se llama asignacion y se utiliza para crear una variable Los nombre validos para una variable son combinaciones de letras numeros
x <- (1:5) # bien escrito
x<-(1:5) # mal escrito
seq(1, 5, 0.5) # seq genera secuencias de numeros reales
## [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
seq(1 ,5, 1)
## [1] 1 2 3 4 5
z <- scan() # sirve para ingresar valores
z <- scan()
f <- scan()
rep(1, 20)
## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
rep(1:3,30)
## [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2
## [36] 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1
## [71] 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
rep(seq(1:3),30)
## [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2
## [36] 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1
## [71] 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
rep(1:4,each = 2)
## [1] 1 1 2 2 3 3 4 4
rep(1:4,c(2,2,2,2))
## [1] 1 1 2 2 3 3 4 4
sum(x)
## [1] 15
prod(x)
## [1] 120
max(x)
## [1] 5
min(x)
## [1] 1
which.max(c(3,14,15,2)) #posicion del maximo
## [1] 3
which(c(3,14,15,2)==3)
## [1] 1
which(c(3,14,15,2)==20)
## integer(0)
sort(x, decreasing = TRUE)
## [1] 5 4 3 2 1
fx <- function(x)
{
y <- x^2
cat("El Cuadrado de x es: ",y,"\n")
return(y)
}
fx(5)
## El Cuadrado de x es: 25
## [1] 25
Es importante fijar el directorio de trabajo
getwd() # Me dice el directorio actual
## [1] "d:/Users/Alex Paucar/Desktop"
setwd("d:/Users/Alex Paucar/Desktop/Módulo 1") # Fijo un nuevo directorio
Los archivos más usados para importación son:
Stata Se requiere el paquete foreign
# install.packages("foreign")
library(foreign)
(Casi) todo en R es un objeto
x <- c(1, 2, 3); y <- c("a", "b", "Hola")
z1 <- c(TRUE, TRUE, FALSE)
x <- 9:29
x <- c(1+0i, 2+4i)
y <- c(1.7, "a") ## character
y <- c(TRUE, 2) ## numeric
y <- c("a", TRUE) ## character
Cuando diferentes objetos son mezclados en un vector ocurre una coerción tal que el vector se de la misma clase. Se puede cambiar la clase de los objetos usando funciones del tipo
x <- 0:6
class(x)
## [1] "integer"
as.numeric(x)
## [1] 0 1 2 3 4 5 6
as.logical(x)
## [1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE
as.character(x)
## [1] "0" "1" "2" "3" "4" "5" "6"
as.complex(x)
## [1] 0+0i 1+0i 2+0i 3+0i 4+0i 5+0i 6+0i
a <- c(1,3,2)
a
## [1] 1 3 2
t(a)# trasponer
## [,1] [,2] [,3]
## [1,] 1 3 2
Se suman los vectores uno a uno.
a <- c(1,3,2)
b <- c(2,8,9)
a+b
## [1] 3 11 11
Indexación
Extrae los elementos 1 y 3 de \(y\)
y <- c(1.2,3.9,0.4,0.12)
y[c(1,3)]
## [1] 1.2 0.4
Se puede crear un filtro en otro vector
v <- 3:4
y[v]
## [1] 0.40 0.12
Se puede extraer duplicados
x <- c(4,2,17,5)
y <- x[c(1,1,3)]
y
## [1] 4 4 17
z <- c(5,12,13) # excluir elementos
z[-1]
## [1] 12 13
z[-1:-2]
## [1] 13
z[1:length(z)-1]
## [1] 5 12
z[-length(z)]
## [1] 5 12
El operador “:”
i <- 2
(1:i)-1 # Esto significa (1:i) NO 1:(i-1)
## [1] 0 1
1:(i-1)
## [1] 1
seq(from=12,to=30,by=3)
## [1] 12 15 18 21 24 27 30
seq(from=1.1,to=2,length=10)
## [1] 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0
x <- c(5,12,13);x
## [1] 5 12 13
seq(x)
## [1] 1 2 3
x <- NULL;x
## NULL
seq(x)
## integer(0)
length(seq(x))
## [1] 0
x <- {rep(8,4);x}
rep(c(5,12,13),3)
## [1] 5 12 13 5 12 13 5 12 13
length(rep(c(5,12,13),3))
## [1] 9
rep(c(5,12,13),each=2)# Se intercalan las copias de X
## [1] 5 5 12 12 13 13
my_vector <- 1:20
dim(my_vector)
## NULL
dim(my_vector) <- c(4, 5)
my_vector
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
class(my_vector)
## [1] "matrix"
my_matrix <- my_vector
patients <- c("Bill", "Gina", "Kelly", "Sean")
cbind(patients,my_matrix)
## patients
## [1,] "Bill" "1" "5" "9" "13" "17"
## [2,] "Gina" "2" "6" "10" "14" "18"
## [3,] "Kelly" "3" "7" "11" "15" "19"
## [4,] "Sean" "4" "8" "12" "16" "20"
my_data <- data.frame(patients, my_matrix)
cnames <- c("patient", "age", "weight", "bp", "rating", "test")
colnames(my_data) <- cnames
Desde luego, podemos crear un data frame directamente, por ejemplo
my.data.frame <- data.frame(
ID = c("Carla", "Pedro", "Laura"),
Edad = c(10, 25, 33),
Ingreso = c(NA, 34, 15),
Sexo = c(TRUE, FALSE, TRUE),
Etnia = c("Mestizo","Afroecuatoriana","Indígena")
)
Operaciones con matrices
m1 <- matrix(1, nr = 2, nc = 2)
m2 <- matrix(2, nr = 2, nc = 2)
rbind(m1, m2)
## [,1] [,2]
## [1,] 1 1
## [2,] 1 1
## [3,] 2 2
## [4,] 2 2
cbind(m1,m2)
## [,1] [,2] [,3] [,4]
## [1,] 1 1 2 2
## [2,] 1 1 2 2
x <- array(1:20, dim=c(4,5))
z <- factor(LETTERS[1:3], ordered = TRUE)
x <- factor(c("a", "b", "b", "a"))
x
## [1] a b b a
## Levels: a b
sex_char <- c("m", "m", "m")
sex_factor <- factor(sex_char, levels = c("m", "f"))
table(sex_char)
## sex_char
## m
## 3
table(sex_factor)
## sex_factor
## m f
## 3 0
x <- list(list(list(list())))
str(x)
## List of 1
## $ :List of 1
## ..$ :List of 1
## .. ..$ : list()
is.recursive(x)
## [1] TRUE
c() combinará varias listas en una sola. Si se tiene una combinación de vectores y listas, c() coerciona a los vectores como listas antes de combinarlos. Compara los resultados de list() y c():
x <- list(list(1, 2), c(3, 4))
y <- c(list(1, 2), c(3, 4))
str(x)
## List of 2
## $ :List of 2
## ..$ : num 1
## ..$ : num 2
## $ : num [1:2] 3 4
str(y)
## List of 4
## $ : num 1
## $ : num 2
## $ : num 3
## $ : num 4
x <- c(1, 2, NA, 10, 3)
is.na(x)
## [1] FALSE FALSE TRUE FALSE FALSE
is.nan(x)
## [1] FALSE FALSE FALSE FALSE FALSE
x <- c(1, 2, NaN, NA, 4)
is.na(x)
## [1] FALSE FALSE TRUE TRUE FALSE
is.nan(x)
## [1] FALSE FALSE TRUE FALSE FALSE
x <- 1:50000
y <- x^2
z=0
for (i in 1:50000) z[i] <- x[i]^2
La función plot(x)
x <- seq(10,20,1)
plot(x)
La función plot(x,y)
y <- seq(30,40,1)
plot(x,y)