respectiva - etiquetas que no tienen cierre
Error en<mi código>: el destino de la asignación se expande a un objeto que no es lenguaje (1)
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 devuelve NULL <- 1
?)
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 intenta y construye 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 utilizar assign
:
assign(paste0("x", "y"), 1)
Un escenario común en el que esto ocurre es cuando se trata de asignar 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 para get
o assign
sino recordar que podemos referirnos a las columnas del marco de datos por variables de caracteres utilizando el operador [
o [[
operador:
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 o bien
assign("x", 1)
o simplemente
"x" <- 1
El uso de get () con funciones de reemplazo trata con un caso más complejo de get
combinado con una función de reemplazo.
Cuando se usa el paquete magrittr
, los operadores de tubería 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
Vea también Asignación en lenguaje R cuyas respuestas detallan algunos de los arcanos relacionados con la asignación, en particular la descripción de la asignación de subconjunto de la definición del lenguaje R.
Recibi el error
Error in <my code> : target of assignment expands to non-language object
o
Error in <my code> : invalid (do_set) left-hand side to assignment
o
Error in <my code> : invalid (NULL) left side of assignment
¿Qué significa y cómo lo prevengo?