“错误:找不到对象'<myvariable>'”是什么意思?

What does "Error: object '<myvariable>' not found" mean?

提问人:Richie Cotton 提问时间:1/11/2015 最后编辑:BartoszKPRichie Cotton 更新时间:1/13/2022 访问量:329685

问:

我收到错误消息:

错误:找不到对象“x”

或者更复杂的版本,如

均值 (x) 中的误差: 在为函数“mean”选择方法时计算参数“x”时出错:错误:找不到对象“x”

这是什么意思?

R-常见问题

评论


答:

35赞 3 revsRichie Cotton #1

该错误意味着 R 找不到错误消息中提到的变量。

重现错误的最简单方法是键入不存在的变量的名称。(如果已定义,请使用其他变量名称。x

x
## Error: object 'x' not found

更复杂的错误版本具有相同的原因:在不存在时调用函数。x

mean(x)
## Error in mean(x) : 
##   error in evaluating the argument 'x' in selecting a method for function 'mean': Error: object 'x' not found

定义变量后,不会发生错误。

x <- 1:5
x
## [1] 1 2 3 4 5     
mean(x)
## [1] 3

您可以使用 ls 检查变量是否存在或存在

ls()        # lists all the variables that have been defined
exists("x") # returns TRUE or FALSE, depending upon whether x has been defined.

使用非标准评估时,可能会发生此类错误。例如,使用子集时,如果要子集的数据框中不存在列名,则会发生错误。

d <- data.frame(a = rnorm(5))
subset(d, b > 0)
## Error in eval(expr, envir, enclos) : object 'b' not found

如果使用自定义评估,也可能发生此错误。

get("var", "package:stats") #returns the var function
get("var", "package:utils")
## Error in get("var", "package:utils") : object 'var' not found

在第二种情况下,当 R 在包环境中查找时,找不到 var 函数,因为它在搜索列表中比 .utilsutilsstats


在更高级的用例中,您可能希望阅读:

评论

0赞 R. Schreurs 11/8/2017
我尝试使用 exists(“x”),但如果 x 为 NULL,这会抛出错误: .is.null(x) 可以对此进行测试,但如果未找到 x,则该测试会抛出错误: .第22条军规?Error in exists(x) : invalid first argumentError: object 'x' not found
1赞 Richie Cotton 11/10/2017
@R.Schreurs 返回。我想你有一个不同的问题。x <- NULL; exists("x")TRUE
1赞 R. Schreurs 11/10/2017
你是对的。我现在假设我没有在我的电话中引用:应该是.xexists(x)exists("x")
3赞 TMWP 2/20/2017 #2

除了解释其含义外,让我们讨论为什么可以在 R 中抛出“找不到对象”错误。它(对许多人来说)的含义是显而易见的:至少根据 R 解释器的说法,所讨论的变量尚未定义,但如果您在代码中看到您的对象,则发生这种情况的原因可能有多种:

  1. 检查声明的语法。如果在以后的调用语句中键入了一个字母或使用了大写而不是小写,那么它将与原始声明不匹配,并且会发生此错误。

  2. 您是否在笔记本或 Markdown 文档中收到此错误?您可能只需要重新运行具有声明的早期单元格,然后再运行要调用变量的当前单元格。

  3. 您是否正在尝试编织 R 文档,并且变量在运行单元格时起作用,但在编织单元格时不起作用?如果是这样 - 那么你要检查我在下面提供的代码片段,看看是否有触发此错误的可能副作用:

    {r sourceDataProb1, echo=F, eval=F} # some code here

上面的代码片段来自 R markdown 单元格的开头。如果 eval 和 echo 都设置为 False,则在尝试编织文档时可能会触发错误。澄清一下。我有一个用例,我将这些标志保留为 False,因为我认为我不希望我的代码被回显或其结果显示在我生成的 Markdown HTML 中。但是由于该变量随后被用于后来的单元格中,这导致了编织过程中的错误。使用 T/F TRUE/FALSE 标志进行简单的试错可以确定在从 RStudio 编织 R Markdown 文档时发生错误时,这是否是错误的根源。

最后:在声明变量后,您是否删除了变量或将其从内存中清除?

  • rm() 删除变量
  • 点击 RStudio 环境窗口中的扫帚图标会清除当前工作环境中的所有内容
  • ls() 可以帮助您查看当前处于活动状态的内容,以查找缺少的声明。
  • exists(“x”) - 正如另一位发帖者所提到的,可以帮助您在具有非常长的活动变量列表的环境中测试特定值
10赞 Shalini 8/19/2018 #3

在 R 中执行多行代码时,您需要首先选择所有代码行,然后单击“运行”。 当我们不选择语句并单击“运行”时,通常会出现此错误。

3赞 user10855172 1/2/2019 #4

我在 R-studio 上遇到了类似的问题。当我尝试做我的情节时,这条消息出现了。

最终我意识到这背后的原因是我的地块“窗口”太小了,我必须把它放大才能“容纳”里面的所有地块!

希望能帮到您

评论

4赞 Waqas 9/5/2019
这没有意义
1赞 Pendragon 1/13/2022 #5

我将在这里添加它,即使这不是一个新问题,因为它在错误的搜索结果中排名很高:

如上所述,重新检查语法,如果您使用的是 dplyr,请确保您在错误上方的行末尾有所有 %>% 管道,否则 select 语句等任何内容都不会传递到代码块的下一部分。