2014-12-26 7 views
19

я получил ошибкуОшибка в <my code>: цель присвоения расширяется до объекта, не являющегося языком

Error in <my code> : target of assignment expands to non-language object 

или

Error in <my code> : invalid (do_set) left-hand side to assignment 

или

Error in <my code> : invalid (NULL) left side of assignment 

Что это значит, и как я предотвращаю это?

ответ

27

Эти ошибки возникают при попытке выполнить assign a value переменной, которой не существует, или что R не может обрабатываться как name. (A имя является тип переменной, которая содержит имя переменной.)

Чтобы воспроизвести ошибки, попробуйте: (Можете ли вы угадать, какой из трех ошибок NULL <- 1 возвращается)

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 


малоизвестная особенностью R является то, что вы можете присвоить значения в строку:

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

Это не работает, если вы попытаетесь построить строку, используя более сложное выражение, используя, например, paste.

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

См

Create a variable name with "paste" in R? и
How to name variables on the fly?

Решение этой проблемы заключается в использовании assign:

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

Общий сценарий, в котором эта гр omes up при попытке назначить столбцам кадров данных. Часто попытка будет сделана paste() вместе левая рука об уступке, то есть

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

Часто оптимальным решением здесь является не прибегать к get или assign, но помнить, что мы можем ссылаться на кадр данных столбцов переменный характер с использованием [ или [[ оператора:

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

Кроме того, вы не можете присвоить результат get.

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

Раствор либо

assign("x", 1) 

или просто

"x" <- 1 

Using get() with replacement functions дело с более сложным случае get в сочетании с функцией замены.


Смотрите также Assignment in R language, чьи ответы подробно некоторые из Арканов, связанных с назначением, в частности, описание определения R языка в Subset Assignment.

 Смежные вопросы

  • Нет связанных вопросов^_^