Эти ошибки возникают при попытке выполнить 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.