提问人:Richie Cotton 提问时间:1/11/2015 最后编辑:BartoszKPRichie Cotton 更新时间:1/13/2022 访问量:329685
“错误:找不到对象'<myvariable>'”是什么意思?
What does "Error: object '<myvariable>' not found" mean?
问:
我收到错误消息:
错误:找不到对象“x”
或者更复杂的版本,如
均值 (x) 中的误差: 在为函数“mean”选择方法时计算参数“x”时出错:错误:找不到对象“x”
这是什么意思?
答:
该错误意味着 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() # 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
函数,因为它在搜索
列表中比 .utils
utils
stats
在更高级的用例中,您可能希望阅读:
- CRAN 手册的“范围”部分 R 和
demo(scoping)
- 高级R的非标准评估章节
评论
Error in exists(x) : invalid first argument
Error: object 'x' not found
x <- NULL; exists("x")
TRUE
x
exists(x)
exists("x")
除了解释其含义外,让我们讨论为什么可以在 R 中抛出“找不到对象”错误。它(对许多人来说)的含义是显而易见的:至少根据 R 解释器的说法,所讨论的变量尚未定义,但如果您在代码中看到您的对象,则发生这种情况的原因可能有多种:
检查声明的语法。如果在以后的调用语句中键入了一个字母或使用了大写而不是小写,那么它将与原始声明不匹配,并且会发生此错误。
您是否在笔记本或 Markdown 文档中收到此错误?您可能只需要重新运行具有声明的早期单元格,然后再运行要调用变量的当前单元格。
您是否正在尝试编织 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”) - 正如另一位发帖者所提到的,可以帮助您在具有非常长的活动变量列表的环境中测试特定值
在 R 中执行多行代码时,您需要首先选择所有代码行,然后单击“运行”。 当我们不选择语句并单击“运行”时,通常会出现此错误。
我在 R-studio 上遇到了类似的问题。当我尝试做我的情节时,这条消息出现了。
最终我意识到这背后的原因是我的地块“窗口”太小了,我必须把它放大才能“容纳”里面的所有地块!
希望能帮到您
评论
我将在这里添加它,即使这不是一个新问题,因为它在错误的搜索结果中排名很高:
如上所述,重新检查语法,如果您使用的是 dplyr,请确保您在错误上方的行末尾有所有 %>% 管道,否则 select 语句等任何内容都不会传递到代码块的下一部分。
评论