2015-01-11 204 views

回答

20

該錯誤表示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 

您可以檢查,看看是否存在的變量使用lsexists

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

象這樣的錯誤可以當使用非標準的評價發生。例如,使用subset時,如果在子數據框中不存在列名,則會發生錯誤。如果您使用自定義的評估,也可能發生

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看起來在utils包的環境,因爲utils進一步下跌比statssearch列表不能找到var功能。


在更先進的使用情況,您不妨閱讀:

+0

我試圖使用exists(「X」)的一個非常漫長的名單,但如果x爲NULL,則會引發錯誤:'存在(x)中的錯誤:無效的第一個參數'。 is.null(x)可以測試,但如果找不到x,該測試會拋出一個錯誤:'Error:object'x'not found'。抓住22? –

+0

@ R.Schreurs'x < - NULL;存在(「x」)'返回'TRUE'。我認爲你有一個不同的問題。 –

+0

你說得對。我現在假設我在我的調用中沒有引用'x':exists(x)'應該是'exists(「x」)'。 –

3

讓我們來討論一下爲什麼一個 「找不到對象」 的錯誤能拋在R中除了解釋它的意思。它的含義很明顯:至少根據R解釋器,所討論的變量尚未定義,但如果在代碼中看到對象,則可能有多種原因導致這種情況發生:

  1. 檢查聲明的語法。如果您在稍後的調用語句中錯誤輸入了一個字母或使用了大寫字母而不是小寫字母,那麼它將與您的原始聲明不符,並且會發生此錯誤。

  2. 您是否在筆記本或降價文檔中出現此錯誤?在運行調用變量的當前單元格之前,您可能只需要重新運行一個具有聲明的早期單元格。

  3. 你試圖編織你的R文件和變量的作品找到當你運行細胞,但不是當你編織細胞時?如果是這樣的 - 那麼你要檢查我的觸發此錯誤可能的副作用下面提供的代碼片段:

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

以上片段是從R降價單元的開始。如果eval和echo都設置爲False,當您嘗試編織文檔時,這可能會觸發錯誤。澄清。我有一個用例,我將這些標誌作爲False使用,因爲我認爲我不希望我的代碼被回顯或其結果顯示在我正在生成的markdown HTML中。但是由於變量在之後的單元格中使用,這會在編織過程中產生錯誤。使用T/F TRUE/FALSE標誌進行簡單的反覆試驗可以確定,如果在RStudio編織R降價文檔時發生錯誤,這是您的錯誤的根源。

最後:在聲明它之後,你是否刪除了變量或將它從內存中清除了?

  • RM()刪除了這些變量
  • 擊中RStudio的環境現狀窗口掃帚圖標在當前的工作環境clearls一切
  • LS()可以幫助你看到的是積極的,現在找缺少宣言。
  • 存在(「X」) - 一個由另一個海報所說,可以幫助你在一個環境中測試一個特定的值與活躍的變量