Polimorfismo en Programación R

El lenguaje R está evolucionando e implementa polimorfismo paramétrico, lo que significa que los métodos en R se refieren a funciones, no a clases . El polimorfismo paramétrico le permite principalmente definir un método o una función genéricos para tipos de objetos que aún no ha definido y que es posible que nunca lo haga. Esto significa que uno puede usar el mismo nombre para varias funciones con diferentes conjuntos de argumentos y de varias clases. El mecanismo de llamada a métodos de R es genérico, lo que permite registrar ciertos nombres para que sean tratados como métodos en R, y actúan como despachadores. 

Funciones genéricas

El polimorfismo en R puede obtenerse mediante los genéricos. Permite que ciertos nombres sean tratados como métodos y actúan como despachadores. Entendamos con la ayuda de la función plot() y la función de resumen. En la programación R, las funciones y devuelven diferentes resultados según los objetos que se les pasan y es por eso que son funciones genéricas que implementan polimorfismo. 

parcela() en R

es una de las funciones genéricas que implementan el polimorfismo en R. Produce un gráfico diferente si se le da un vector , un factor , un marco de datos , etc. Pero, ¿alguna vez te has preguntado cómo la clase de vectores o factores determina el método utilizado? para tramar? Veamos el código de la función plot. 

Ejemplo: código de la función de trama

R

plot

Producción:

function (x, y, ...)
UseMethod("plot")

Podemos ver que el cuerpo de la función plot contiene solo una expresión y es UseMethod(“plot”). Veamos la definición de UseMethod con la ayuda de la función help().

Ejemplo: Definición del método help().

R

help(UseMethod)

Producción:

Del resultado anterior, podemos ver que UseMethod toma dos parámetros generic y object. 

  • El genérico es el nombre de la string que es el nombre de la función (parcela en este caso). 
  • Este es un objeto cuya clase determinará el método que se «enviará». Es decir, el objeto para el que se llamará al método genérico.

UseMethod luego busca la función de trazado adecuada que se necesita llamar creando una string del tipo plot.object. También podemos ver todos los métodos disponibles para la función de trazado.

Ejemplo:

R

methods(plot)

Producción:

plot function

Veamos cómo funcionan tomando argumentos y mostrando diferentes salidas

La entrada es un vector numérico

En este ejemplo, tomemos un solo vector numérico dentro de la función como parámetro.

R

# R program to illustrate
# polymorphosim
 
# X Window System Graphics (X11)
X11(width = 15, height = 13)
 
# The runif() function generates
# random deviates of the uniform distribution
x <- 3 * runif(40) + (1:30)
par(mar = c(20, 20, 1, 1))
 
# type='l' is used  to connect the points
# of the scatter plots with lines.
plot(x, type = 'l', col = '#343deb')
 
# We can do  mouse click or enter pressed
z <- locator(1)

 Producción:

plot function in r

Las entradas son dos vectores numéricos

Necesitamos pasar dos parámetros vectoriales y produce un gráfico de dispersión en consecuencia.

R

# R program to illustrate
# polymorphosim
 
# X Window System Graphics (X11)
X11(width = 5, height = 3)
 
# The runif() function generates random
# deviates of the uniform distribution
x <- runif(20)
y <- runif(20) * x
par(mar = c(2, 2, 0.3, 0.3))
 
# type = 'p' means as points, the output comes as scattered
# pch stands for plot character. pch = 16 we get . character
plot(x, y, type = 'p', pch = 16, col = '#ab1ab0')
 
#Either mouse press or enter key press wait
z <- locator(1)

 Producción:

plot function in r

La entrada es un factor

Si pasamos factor como argumentos, obtenemos un patrón de gráfico de barras. 

R

# R program to illustrate
# polymorphosim
 
# X Window System Graphics (X11)
X11(width = 5, height = 8)
 
# here fruits names are passed and barchart is produced as output
f <- factor(c('apple', 'orange', 'apple', 'pear', 'orange',
              'apple', 'apple', 'orange'))
par(mar = c(2, 2, 0.6, 0.6))
 
# Using plot()
plot(f, col = '#8f4c91')
z <- locator(1)

 Producción:

plot function in r

La entrada es un marco de datos

La función Plot toma el marco de datos como argumento y cada variable del marco de datos se grafica una contra la otra.

R

# R program to illustrate
# polymorphosim
 
# X Window System Graphics (X11)
X11(width = 6, height = 6)
 
set.seed(280870)
x <- c(4, 3, 1, 2, 2, 4, 6, 4, 5, 5,
       4, 4, 5, 4, 4, 8, 4, 1, 2, 7)
y <- x * rnorm(20, 1, 0.3)
z <- x * y
 
# Takina a data frame
df <- data.frame(x, y, z)
par(mar = c(0.1, 0.1, 0.1, 0.1))
 
# Using plot()
plot(df, col = '#a832a6', pch = 16, cex = 1.5)
z <- locator(1)

 Producción:

plot function in r

resumen() en R

También es una función genérica que implementa el polimorfismo en R. Se utiliza para producir resúmenes de los resultados de varias funciones de ajuste de modelos.

Ejemplo 1:

R

# R program to illustrate
# polymorphosim
 
# Rainbow colors and let us see summary of it
colors <- c("violet", "indigo", "blue", "green",
            "yellow", "orange", "red")
summary(colors)

 Producción:

Length     Class      Mode 
  7      character character 

Ejemplo 2:

Verifiquemos los resultados resumidos para state.region. En R, generalmente muestra cuáles son las regiones disponibles en «Noreste», «Sur», «Norte Central» y «Oeste». Usando la función, cualquiera puede pasar state.region como primer parámetro y como segundo paso, (opcionalmente) pasar el argumento «maxsum». “maxsum” indica cuántos niveles se deben mostrar para los factores en la salida.

R

# R program to illustrate
# polymorphosim
 
state.region
 
# Provides summarised results under each region
summary(state.region)
 
# As maxsum is given as 3, totally we should have 3 regions
# But here we have 4 regions and hence highest count region,
# next highest count region is displayed and the other
# regions are clubbed under Other
summary(state.region, maxsum = 3)

Producción:

> state.region
 [1] South         West          West          South         West          West         
 [7] Northeast     South         South         South         West          West         
[13] North Central North Central North Central North Central South         South        
[19] Northeast     South         Northeast     North Central North Central South        
[25] North Central West          North Central West          Northeast     Northeast    
[31] West          Northeast     South         North Central North Central South        
[37] West          Northeast     Northeast     South         North Central South        
[43] South         West          Northeast     South         West          South        
[49] North Central West         
Levels: Northeast South North Central West

> summary(state.region) 
    Northeast         South North Central          West 
            9            16            12            13 
                        
> summary(state.region, maxsum = 3) 
  South    West (Other) 
     16      13      21 

Ejemplo 3:

Si el conjunto de datos es muy grande, echemos un vistazo a cómo funciona la función.

R

# R program to illustrate
# polymorphosim
 
# 10 different data sets are taken using stats::rnorm
x <- stats::rnorm(10)
x
 
# Let us cut the dataset to lie between -3 and 3 and
# in this case, it will be
# (-3,-2] (-2,-1] (-1,0] (0,1] (1,2] (2,3]
c <- cut(x, breaks = -3:3)
c
 
# Summarized the available dataset under the given levels
summary(c)

 Producción:

> x
 [1]  0.66647846 -0.29140286 -0.29596477 -0.23432541 -0.02144178  1.56640107  0.64575227
 [8] -0.23759734  0.73304657 -0.04201218
 
> c
 [1] (0,1]  (-1,0] (-1,0] (-1,0] (-1,0] (1,2]  (0,1]  (-1,0] (0,1]  (-1,0]
Levels: (-3,-2] (-2,-1] (-1,0] (0,1] (1,2] (2,3]

> summary(c)
(-3,-2] (-2,-1]  (-1,0]   (0,1]   (1,2]   (2,3] 
      0       0       6       3       1       0 

Hasta ahora, hemos descrito la función y que es una función polimórfica. Por medio de diferentes entradas, el comportamiento de la función cambia y produce salidas. Aquí podemos ver el concepto de polimorfismo. De manera similar, en función, por medio de parámetros variables, el mismo método es aplicable para proporcionar diferentes resultados estadísticos. Ahora vamos a crear nuestros propios métodos genéricos.

Creación de un método genérico

Creemos un banco de clases e intentemos crear nuestro propio método display() que usará el método print() y mostrará el contenido de la clase en el formato especificado por nosotros.

Para hacer esto, primero tenemos que crear una función genérica display() que usará la función UseMethod.

R

display <- function(obj){
    UseMethod("print")
}

Después de crear la función de visualización genérica, creemos la función de visualización para nuestro banco de clases.

R

print.bank<-function(obj)
{
    cat("Name is ", obj$name, "\n")
    cat(obj$account_no, " is the Acc no of the holder\n ")
    cat(obj$saving, " is the amount of saving in the account \n ")
    cat(obj$withdrawn, " is the withdrawn amount\n")
}

Ahora, veamos la salida dada por esta función.

R

x <- list(name ="Arjun", account_no = 1234,
        saving = 1500, withdrawn = 234)
class(x)<-"bank"
 
display <- function(obj){
    UseMethod("print")
}
 
print.bank<-function(obj)
{
    cat("Name is ", obj$name, "\n")
    cat(obj$account_no, " is the Acc no of the holder\n ")
    cat(obj$saving, " is the amount of saving in the account \n ")
    cat(obj$withdrawn, " is the withdrawn amount\n")
}
 
display(x)

Producción:

Name is  Arjun 
1234  is the Acc no of the holder
 1500  is the amount of saving in the account 
 234  is the withdrawn amount

Publicación traducida automáticamente

Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *