Saltar al contenido principal

Cómo solucionar el error de argumento no numérico de operador binario en R

El error de argumento no numérico a operador binario en R ocurre cuando intentas hacer aritmética con datos no numéricos, como una cadena de caracteres o un factor.
Actualizado 30 jul 2024  · 8 min de lectura

Es posible que te hayas encontrado con este error al programar en R: Error: non-numeric argument to binary operator. Esto puede ocurrir al realizar una operación matemática sobre datos que contienen valores no numéricos, como cadenas o caracteres.

En este tutorial, te guiaré sobre cómo abordar y solucionar este error. Primero daré una breve respuesta y luego profundizaré para que puedas entender mejor por qué se produce este error.

La respuesta breve: Cómo solucionar el error de argumento no numérico de operador binario en R

Para los que tengan prisa, solucionar el error de argumento no numérico a operador binario en R implica convertir los datos a tipos numéricos antes de realizar las operaciones aritméticas. Este método garantiza que todos los elementos de tus datos son adecuados para los cálculos matemáticos.

En el siguiente ejemplo, la función as.numeric() convierte directamente el vector characters en numérico, garantizando que la operación de suma se realice sin error.

characters <- c("5", "10", "15")

characters <- as.numeric(characters)

result <- characters + 10

print(result)

Por qué se produce el error

En R, las operaciones aritméticas están diseñadas para trabajar con tipos de datos numéricos. Cuando te encuentres con el error argumento no numérico de operador binario, suele indicar un uso incorrecto de los operadores aritméticos con tipos de datos no numéricos, como cadenas o factores. Para saber más sobre los tipos de datos en R, lee nuestro tutorial Tipos de datos en R.

Esto puede ocurrir en varias situaciones habituales:

  • Operaciones con cadenas de caracteres: El error puede producirse al intentar realizar operaciones aritméticas con datos de texto.
  • Operaciones con tipos de datos factoriales: El error se produce cuando R convierte cadenas en factores dentro de marcos de datos, especialmente al importar datos, lo que da lugar a tipos no numéricos no deseados.
  • Operaciones con listas u otras estructuras complejas: El error también se produce al utilizar operadores aritméticos en listas o estructuras similares inadecuadas para tales operaciones.

Cómo reproducir y solucionar el error

Vamos a crear un conjunto de datos sencillo y a realizar operaciones que desencadenen intencionadamente este error para ilustrar cómo puede producirse. A continuación, corregiremos el error en cada caso.

Cómo reproducir y solucionar el error de las cadenas de caracteres

En nuestro primer ejemplo, vemos este mensaje de error porque los elementos del vector characters no son de tipo numérico, sino cadenas de caracteres.

characters <- c("5", "10", "15")

result <- characters + 10

print(result)

Para solucionarlo, convertimos a numérico utilizando as.numeric():

characters <- c("5", "10", "15")

characters <- as.numeric(characters)

result <- characters + 10

print(result)

Cómo reproducir y solucionar el error por factores

En nuestro siguiente ejemplo, reproduciremos el error para los factores.

factors <- factor(c("5", "10", "15"))

result <- factors + 10

print(result)

Para solucionarlo, convertimos a numérico convirtiendo primero a carácter. Hacemos esto porque, en R, los factores se almacenan como vectores enteros con un conjunto correspondiente de niveles de caracteres.

Cuando conviertes un factor directamente a numérico utilizando as.numeric(), R devuelve los códigos enteros subyacentes, que es la representación entera interna de los niveles del factor, en lugar de los valores de caracteres reales. Al convertir el factor en un carácter, primero se recuperan los niveles reales como cadenas de caracteres, que luego se pueden convertir correctamente en valores numéricos.

factors <- factor(c("5", "10", "15"))

factors <- as.numeric(as.character(factors))

result <- factors + 10

print(result)

Cómo reproducir y solucionar el error de las listas

En nuestro siguiente ejemplo, reproduciremos el error para las listas. 

list_data <- list("5", "10", "15")

result <- list_data + 10

print(result)

Para solucionarlo, extraemos y convertimos los elementos en numéricos. La función unlist() convierte la lista en un vector. 

list_data <- list("5", "10", "15")

list_data <- as.numeric(unlist(list_data))

result <- list_data + 10

print(result)

Cómo reproducir y solucionar el error para tipos de datos mixtos

El siguiente ejemplo es un poco más complicado. Ninguna de nuestras técnicas anteriores funcionaría en este caso porque nos encontraríamos con "20a" que no se puede convertir en un valor numérico. 

La función sapply() ofrece una buena solución en este caso. Aplica una función determinada a cada elemento de nuestro vector. En nuestro caso, definimos una función que intenta convertir cada elemento en un valor numérico.

mixed_data <- list("5", 10, "15", "20a")

numeric_data <- sapply(mixed_data, function(x) {
  if (is.numeric(x)) {
    return(x)
  } else if (!is.na(as.numeric(x))) {
    return(as.numeric(x))
  } else {
    return(NA)
  }
})

result <- numeric_data + 10

print(result)

Para obtener más información sobre la programación funcional en R, consulta nuestro curso Programación funcional intermedia con purrr. Para más información sobre la familia de funciones apply(), lee nuestro Tutorial sobre la familia de funciones Aplicar de R

Cosas adicionales que debes saber

Depuración con rastreo

Cuando se produce un error, traceback() puede ser una valiosa herramienta de depuración. Proporciona una secuencia de llamadas que condujeron al error, ayudándote a identificar el punto exacto del fallo.

traceback()

Tras ejecutar este comando, R imprimirá la secuencia de llamadas a funciones que condujeron al error. Esto puede dar una idea de dónde pueden haberse introducido los datos no numéricos.

Revisar los métodos de introducción de datos

También puedes comprobar cómo se importan los datos y asegurarte de que se convierten correctamente. Al importar datos, especialmente de archivos CSV, R puede convertir automáticamente los datos de caracteres en factores. Es importante controlar este comportamiento para garantizar que tus datos se importan correctamente.

# Assuming data is read from a CSV incorrectly imported as factors
data <- read.csv("data.csv", stringsAsFactors = TRUE)

data$column <- as.numeric(as.character(data$column))

En este ejemplo, los datos se importan desde un archivo CSV con stringsAsFactors configurado en TRUE. A continuación, convertimos la columna del factor en un carácter y, posteriormente, en numérico para garantizar un tipo de datos adecuado para las operaciones aritméticas.

Cómo evitar el error

Utilizar comprobaciones condicionales

Para evitar que se produzca este error, intenta aplicar comprobaciones condicionales para asegurarte de que los tipos de datos son adecuados para las operaciones. Comprobar el tipo de datos y manejar condicionalmente las conversiones necesarias es una buena práctica antes de realizar operaciones.

En el siguiente ejemplo, comprobamos si los datos son numéricos. Si no, lo convertimos en numérico antes de proceder a la operación aritmética. Esto detecta los tipos de datos erróneos y los convierte en numéricos. 

data <- "20"

if(is.numeric(data)) {
  result <- data + 10
} else {
  data <- as.numeric(data)
  result <- data + 10
}

print(result)

ejemplo de comprobaciones condicionales

Conclusión y recursos adicionales

Espero que este artículo te haya servido para resolver tu problema. Errores como el error de argumento no numérico a operador binario son comunes en programación, y saber cómo tratarlos es importante. Comprender los tipos de datos y las conversiones adecuadas puede ayudar a evitar que se produzca este error.

Para ayudarte con R, puedes consultar nuestras hojas de trucos de R o nuestro curso gratuito Introducción a R o, para un conocimiento más profundo, prueba nuestro Curso de Habilidades de Programación en R.

Preguntas frecuentes

¿Qué es un argumento no numérico?

Un argumento no numérico es un valor o variable que no puede interpretarse como un número en un lenguaje de programación como R.

¿Cómo puedo detectar este error en mi código?

El mensaje de error suele incluir la frase "argumento no numérico", lo que facilita su identificación.

¿Este error sólo se produce en R?

No, este error también puede producirse en otros lenguajes de programación. Sin embargo, el mensaje de error puede aparecer de forma diferente.

¿Hay alguna forma de evitar totalmente este error?

Sí, asegurándote de que todos los valores y variables de tu código son compatibles con el operador específico que se utiliza.

¿Puedo utilizar cualquier tipo de operador con argumentos no numéricos?

No, algunos operadores sólo pueden utilizarse con valores numéricos y darán lugar a este error si se les dan argumentos no numéricos.

Temas

Aprende R con DataCamp

curso

Introduction to R

4 hr
2.8M
Master the basics of data analysis in R, including vectors, lists, and data frames, and practice R with real data sets.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

tutorial

Tutorial de pruebas T en R: Aprende a realizar pruebas T

Determina si existe una diferencia significativa entre las medias de los dos grupos utilizando t.test() en R.
Abid Ali Awan's photo

Abid Ali Awan

10 min

tutorial

A Loops in R Tutorial - Uso y Alternativas

Un tutorial sobre bucles en R que examina las construcciones disponibles en R para realizar bucles. Descubra alternativas utilizando la función de vectorización de R.
Carlo Fanara's photo

Carlo Fanara

32 min

tutorial

Tutorial sobre cómo instalar R en Windows, Mac OS X y Ubuntu

Esta es una guía para principiantes diseñada para ahorrarte dolores de cabeza y un tiempo valioso si decides instalar R tú mismo.
Francisco Javier Carrera Arias's photo

Francisco Javier Carrera Arias

6 min

tutorial

Tutorial de tablas de contingencia en R

En este tutorial, aprenderás a crear tablas de contingencia y a probar y cuantificar las relaciones visibles en ellas.
Łukasz Deryło's photo

Łukasz Deryło

10 min

tutorial

Tutorial de tuberías en R para principiantes

Aprenda más sobre el famoso operador de tuberías %>% y otras tuberías en R, por qué y cómo debe utilizarlas y qué alternativas puede considerar.
Karlijn Willems's photo

Karlijn Willems

25 min

tutorial

Tutorial de regresión lineal en R

En este tutorial aprenderás los fundamentos de un modelo estadístico muy popular: la regresión lineal.

Eladio Montero Porras

15 min

See MoreSee More