为了账号安全,请及时绑定邮箱和手机立即绑定

<我的代码>中的错误:分配目标扩展为非语言对象

<我的代码>中的错误:分配目标扩展为非语言对象

largeQ 2019-11-02 13:25:24
我收到了错误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 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

当您尝试为不存在的变量或R不能视为的变量赋值时,会发生这些错误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

看到


在R中创建带有“ paste”的变量名?以及

如何动态命名变量?


解决方案是使用assign:


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

出现这种情况的常见情况是尝试分配给数据帧的列。通常会尝试将paste()作业的左手放在一起,即


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

通常,这里的最佳解决方案不是求助于get或assign要记住,我们可以使用[or [[运算符通过字符变量来引用数据框列:


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

又见中的R语言分配其答案详细一些相关的任务,特别是R语言定义的描述的奥秘的子集分配。


查看完整回答
反对 回复 2019-11-02
  • 1 回答
  • 0 关注
  • 2063 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信