2016-09-21 35 views
10

我有一段代碼只在第一次運行時產生錯誤。奇怪的是,如果我第二次運行它,我沒有錯誤(瘋狂定義?)。此外,錯誤並不總是出現在相同的位置,我的意思是如果我添加幾行註釋,錯誤消息將在註釋之後打印,而不是在特定指令之後打印。R錯誤:應用於非向量的名稱()

我不能提供一個可重複的例子,因爲我不知道錯誤來自哪裏。錯誤是:

Error in names(frame)[names(frame) == "x"] <- name : 
    names() applied to a non-vector 

我應該指定一個在我的代碼,我沒有 - 至少explicitly-一個names()功能。

+0

嘗試逐行運行您的代碼並查看哪一行出現錯誤。 – niczky12

+0

我總是一行一行地進行調試,問題是我從來不知道錯誤何時會顯示出來。我會再試一次。 – Manfredo

+1

嘗試使用選項運行(錯誤=恢復);當錯誤發生時,您將最終進入調試器;在那裏你可以探索你在代碼中的位置以及發生了什麼,請參閱調試器命令的幫助(瀏覽器)對「names()」的調用可能在您調用的某個庫/包中。 –

回答

17

這是一個棘手的錯誤。我能夠找出原因,並且似乎是R具有與緩存的函數同名的對象。如果使用諸如RStudio之類的IDE,View(df)的選項卡就很可能出現這種情況。除非關閉標籤,否則即使運行沒有代碼的功能也會給你這個錯誤。同樣,如果該選項卡未關閉,則即使刪除所有對象或執行垃圾收集也可以解決該問題。一旦標籤關閉,錯誤將消失。

+0

我可以證實這一點。嘗試創建一個名爲「合併」的對象,並刪除同一個對象,你會得到錯誤(至少如果data.table被加載,但可能甚至基本合併將導致這一點)。很可能因爲有這個名字的功能。 –

1

我有同樣的錯誤,它是我寫的一個特定函數的錯誤。每次我加載函數時都會拋出錯誤,即使我註釋掉了函數中的所有代碼。我發現改變我的函數的變量名稱會停止錯誤。我唯一的猜測是有一些奇怪的變量名稱衝突。

+0

嗯我會仔細研究一下。現在我甚至都不記得錯誤發生在哪裏,但我有感覺它會再次彈出。然後我會嘗試更新該帖子,無論如何謝謝:) – Manfredo

+0

我昨天遇到這個問題,發現這個職位。它確實是一個奇怪的錯誤。幸運的是我能夠找到解決方法,但我不知道爲什麼會發生奇怪的命名衝突。 – JMT2080AD

-5

只需添加

as.vector(dataframe) 

這工作。

+2

不,它不。另外,將df轉換爲矢量是我猜測你幾乎不想做的事情。 – Manfredo

0

我有同樣的錯誤。其原因與我很久以前用名爲「df」保存的文件有關,它與當前變量(也稱爲df)產生干擾。

然而,這個解決方案是直截了當的:通過運行代碼的第一行,然後清除全局環境並再次運行,找到有問題的行。如果沒有錯誤發生,請添加下一行,依此類推,直到發生錯誤。然後,更改該行中變量的名稱。

0

即使我有同樣的錯誤。在我的情況下,原因是有另一個數據框與函數內的函數具有相同的名稱。我猜R在出現類型不匹配時也會拋出這個錯誤。在我的情況下,這個名字首先被作爲一個函數讀取。當R再次遇到相同的名稱時,它會尋找一個函數,但是卻找到了一個數據框。

我所要做的只是改變其中一個的名字,錯誤消失了。