<我的代码> 中的错误:分配目标扩展到非语言对象
Posted
技术标签:
【中文标题】<我的代码> 中的错误:分配目标扩展到非语言对象【英文标题】:Error in <my code> : target of assignment expands to non-language object 【发布时间】:2015-02-24 01:30:34 【问题描述】:我收到了错误
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
这是什么意思,我该如何预防?
【问题讨论】:
【参考方案1】:当您尝试 assign a value 到一个不存在的变量或 R 不能将其视为 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
会返回三个错误中的哪一个吗?)
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)
出现这种情况的常见情况是尝试分配给数据框的列时。通常会尝试将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
结合替换函数的更复杂情况。
使用magrittr
包时,意外尾随pipe operators 也会导致此错误。
library(magrittr)
x <- 1 %>%
y <- 2
## Error in 1 %>% y <- 2 :
## target of assignment expands to non-language object
另请参阅Assignment in R language,其答案详细介绍了与赋值相关的一些奥秘,尤其是 R 语言定义对Subset Assignment 的描述。
【讨论】:
以上是关于<我的代码> 中的错误:分配目标扩展到非语言对象的主要内容,如果未能解决你的问题,请参考以下文章
在道具分配中使用扩展运算符时React Native收到错误:“在这种环境下,分配的目标必须是一个对象