Error en : el objective de la asignación se expande a un objeto que no es de idioma

Recibí el error

Error in  : target of assignment expands to non-language object 

o

 Error in  : invalid (do_set) left-hand side to assignment 

o

 Error in  : invalid (NULL) left side of assignment 

¿Qué significa y cómo lo evito?

Estos errores ocurren cuando intenta asignar un valor a una variable que no existe, o que R no puede tratar como un name . (Un nombre es un tipo de variable que contiene un nombre de variable).

Para reproducir los errores, intente:

 1:2 <- 1 ## Error in 1:2 <- 1 : target of assignment expands to non-language object 1 <- 1 ## Error in 1 <- 1 : invalid (do_set) left-hand side to assignment mean() <- 1 ## Error in mean() <- 1 : invalid (NULL) left side of assignment 

(¿Puedes adivinar cuál de los tres errores NULL <- 1 devuelve?)


Una característica poco conocida de R es que puede asignar valores a una cadena:

 "x" <- 1 # same as x <- 1 

Esto no funciona si intentas construir la cadena usando una expresión más compleja usando, por ejemplo, paste .

 paste0("x", "y") <- 1 ## Error: target of assignment expands to non-language object 

Ver

Crear un nombre de variable con "pegar" en R? y
¿Cómo nombrar variables sobre la marcha?

La solución a esto es usar assign :

 assign(paste0("x", "y"), 1) 

Un escenario común en el que esto aparece es cuando se intenta asignar a columnas de marcos de datos. A menudo se intentará paste() la mano izquierda de la tarea, es decir,

 paste0("my_dataframe$","my_column") <- my_value 

A menudo, la solución óptima aquí no es recurrir a get o assign sino recordar que podemos referirnos a las columnas del dataframe por variables de caracteres usando el operador [ o [[ :

 x <- "my_column" my_dataframe[,x] <- value #or... my_dataframe[[x]] <- value 

Del mismo modo, no se puede asignar al resultado de get .

 get("x") <- 1 ## Error in get("x") <- 1 : ## target of assignment expands to non-language object 

La solución es cualquiera

 assign("x", 1) 

o simplemente

 "x" <- 1 

Usar get () con funciones de reemplazo se refiere a un caso más complejo de combinación con una función de reemplazo.


Cuando se utiliza el paquete magrittr , los operadores de tuberías de arrastre accidentales también pueden causar este error.

 library(magrittr) x <- 1 %>% y <- 2 ## Error in 1 %>% y <- 2 : ## target of assignment expands to non-language object 

Véase también Asignación en el lenguaje R, cuyas respuestas detallan algunos de los arcanos relacionados con la asignación, particularmente la descripción de la asignación de subconjunto de la definición del lenguaje R.