我收到了错误信息
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
这是什么意思,我该如何预防?
name
时发生的。(一个name是一种变量类型,它保存了一个变量名。)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
你能猜出 NULL <- 1
这三个错误中的哪一个吗?
"x" <- 1 # same as x <- 1
paste
。paste0("x", "y") <- 1
## Error: target of assignment expands to non-language object
请看:
如何在 R 中创建带有“paste”变量名的变量?和
如何动态命名变量?
解决方法是使用 assign
:
assign(paste0("x", "y"), 1)
一个常见的情况是在尝试给数据帧的列赋值时出现。通常会尝试将赋值的左侧用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
使用带有替换函数的 get() 处理了一个更复杂的情况,其中结合了 get
和替换函数。
magrittr
包时,意外的尾随管道运算符也会导致此错误。library(magrittr)
x <- 1 %>%
y <- 2
## Error in 1 %>% y <- 2 :
## target of assignment expands to non-language object