2014-10-03 64 views
1

我在[R腳本代碼下面幾行稱爲assign1.R:只有源()不工作(「節點堆棧溢出」)

(u <- c(1, 1, 0, 1, 0)) # a) 
u[3] # b) 
ones_u <- which(u == 1) # c) 
ones_u 
source("assign1.R") 

,該source()功能不起作用。 R向我顯示以下錯誤消息:

Error in match(x, table, nomatch = 0L) : node stack overflow 
Error during wrapup: node stack overflow 

問題是什麼?

+3

我能問你到底發生了什麼嗎? – joran 2014-10-03 20:37:16

+1

我們怎麼可能知道,沒有看到assign1.R中的代碼? – digEmAll 2014-10-03 20:40:56

+7

所以你的代碼反覆調用自己?我認爲這將是原因。 – stanekam 2014-10-03 20:42:08

回答

11

我沒有得到確切做了同樣的錯誤,但我能得到一個簡單的例子非常相似的東西:

writeLines("source('badsource.R')",con="badsource.R") 
source("badsource.R") 
## Error in guess(ll) : node stack overflow 

如上各國的意見之一,你的文件'重新採購正在嘗試source()本身。

這是你將如何測試從R內這種可能性,而不只是打開一個文本編輯器文件(這是一個更明智的做法):

grepl("source('badsource.R')",readLines("badsource.R"),fixed=TRUE) ## TRUE 

(顯然你應該填寫這裏命名你的作業文件的...)

這感覺就像是你應該已經注意到了這個自己,但我無論如何回答,因爲這個問題是delightfully recursive ...

+0

我想將其作爲重複關閉,但它不在列表中 – baptiste 2014-10-03 23:07:28

+1

可能是因爲這是重複自身的問題。 – 2014-10-03 23:57:44

+1

不幸的是,SO太聰明瞭,無法在自己的「鏈接」部分列出此問題... – 2014-10-04 00:05:34

1

你的採購,你是該文件in。那個source()l應該刪除代碼。如果您從另一個R文件獲取一些代碼,那麼您將使用source()函數,否則不需要另外提供源文件。另外,如果所有代碼都在一個文件中運行,而沒有在其他文件中運行其他代碼位,則很可能您已經擁有了您需要的代碼,並且您不需要另外獲取其他文件。