En este artículo, discutiremos cómo corregir el error «el objeto de tipo ‘cierre’ no se puede subestablecer» en el lenguaje de programación R.
El error que uno puede enfrentar en R es:
object of type 'closure' is not subsettable
El compilador de R produce un error de este tipo cuando intentamos crear un subconjunto de una función. En R, podemos crear subconjuntos de una lista, un vector, etc., pero una función que tiene un tipo de cierre que no se puede dividir en subconjuntos.
Cuándo puede ocurrir este error:
Considere que tenemos una función en R que toma cada elemento de un vector como entrada y lo suma con 10:
R
# Define a function Add <- function(x) { x <- x + 10 return(x) }
Agreguemos un código de controlador de menú que pueda llamar a esta función:
R
# Define a function Add <- function(vect) { vect <- vect + 10 return(vect) } # Define a vector vect <- c(8, 9, 12, 14, 20) # Calling Add function Add(vect)
Producción:
Como puede ver en la salida, cada elemento del vector se suma con 10. Ahora, supongamos que tratamos de crear un subconjunto de esta función:
R
# Define a function Add <- function(vect) { vect <- vect + 10 return(vect) } # Define a vector vect <- c(8, 9, 12, 14, 20) # Try to access the second element # of the function Add[2]
Producción:
El compilador produce tal error porque no está permitido subconjunto de un objeto que tiene el cierre de tipo en R. Para confirmar que la función es de cierre de tipo podemos usar la función typeof() que tiene la siguiente sintaxis:
Sintaxis: tipo de(x)
Parámetros:
x: Representa los datos especificados
R
# Define a function Add <- function(vect) { vect <- vect + 10 return(vect) } # Define a vector vect <- c(8, 9, 12, 14, 20) # Print the type typeof(Add)
Producción:
Cualquier función en R es de tipo cierre. Por ejemplo, intentemos crear un subconjunto de una función incorporada mediana() primero:
Sintaxis: mediana (x)
Parámetro: x: un vector
Tipo de retorno: Devuelve la mediana de los elementos vectoriales .
R
# Try to access the first element median[1]
Producción:
Ahora crearemos un subconjunto de la función incorporada range():
Sintaxis: rango (x)
Parámetro: x: un vector
Tipo de retorno: Devuelve un rango
R
# Try to access the first element range[1]
Producción:
Cómo arreglar este error:
Podemos corregir este error fácilmente al no subdividir la función. Por ejemplo, supongamos que queremos usar la función Add() para el segundo elemento del vector vect:
R
# Define a function Add <- function(vect) { vect <- vect + 10 return(vect) } # Define a vector vect <- c(8, 9, 12, 14, 20) # Try to access the second element # of the function Add(vect[2])
Producción:
Esta vez, el programa se compiló con éxito porque aquí estamos subdividiendo el vector en lugar de la función. Además, tenga en cuenta que podemos aplicar Add() en todo el vector:
R
# Define a function Add <- function(vect) { vect <- vect + 10 return(vect) } # Define a vector vect <- c(8, 9, 12, 14, 20) # Calling Add function Add(vect)
Producción: