提问人:Richie Cotton 提问时间:12/27/2014 更新时间:8/16/2018 访问量:79281
<我的代码>中的错误:赋值目标扩展到非语言对象
Error in <my code> : target of assignment expands to non-language object
问:
我收到了错误
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
这是什么意思,我该如何预防?
答:
79赞
4 revs, 2 users 91%Richie Cotton
#1
当您尝试将值分配给不存在的变量或 R 无法将其视为名称
的变量时,会发生这些错误。(名称是保存变量名称的变量类型。
要重现错误,请尝试:
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
R 的一个鲜为人知的功能是,您可以为字符串赋值:
"x" <- 1 # same as x <- 1
如果您尝试使用更复杂的表达式(例如粘贴
)来构造字符串,则这不起作用。
paste0("x", "y") <- 1
## Error: target of assignment expands to non-language object
看
对此的解决方案是使用 assign
:
assign(paste0("x", "y"), 1)
出现这种情况的常见情况是尝试分配给数据框列时。通常会尝试将作业的左手放在一起,即paste()
paste0("my_dataframe$","my_column") <- my_value
通常,这里的最佳解决方案不是求助于 or,而是记住,我们可以使用 or 运算符通过字符变量引用数据框列: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
评论