2011-12-06 17 views
0
FUNC <- function(i){ 
var <- i 
dist <- sapply(1:(i-1),function(x){list[[x]]*co[var,x]}) 
mean <- sapply(1:(i-1),FUN2) 
block <- t(co[i,i]*list[[i]])+rowSums(mean) 
new_list[[i]] <- t(block) 
} 

當我指定i = 4或i = 10並在函數定義中逐行運行代碼時,它完全工作並且分配new_list[[i]]的值爲t(block)。 然而,當我做函數按指定的i行逐行運行,但不起作用函數調用

FUNC(4) or FUNC(10) 

它返回的錯誤信息

Error in dist[[x]] : subscript out of bounds 

沒有人有任何想法,爲什麼它不會有一個函數調用工作? 謝謝!

+0

有幾個對象是未定義的,這將會幫助你很困難。你在這裏使用的編程風格很奇怪。你能用一些樣本數據更新你的問題,並解釋你想用英語完成什麼?我猜想有一種更有效的方式來完成你在這裏做的事情。 FWIW,我在列表[[x]]中得到一個錯誤:嘗試以'FUNC(4)'運行你的代碼時,'builtin'類型的對象不是子集'錯誤。 – Chase

+0

此外,我們不知道'co'是什麼,'FUN2'是什麼,以及'new_list'的定義位置和方式...... –

+0

另外[函數調用中的賦值是臨時的](http:// cran .r-project.org/doc/manuals/R-intro.html#作業中的作業) – Gregor

回答

3

我懷疑你的FUN2函數使用dist。但你在FUNC裏面計算的dist是本地的,所以FUN2找不到它。相反,它會使用您的全局工作空間中的一個,該空間可能太短。這就是爲什麼你得到這個錯誤信息。

你真的應該改變都FUNCFUN2,使他們不使用任何全局變量(codistlistnew_list - 可能FUN2也可能是參數FUNC)。

...但至少改變FUN2採取dist作爲參數:

FUN2 <- function(i, dist) { 
    # Your code here... 
} 

# In FUNC: Pass dist to FUN2 
mean <- sapply(1:(i-1),FUN2, dist=dist) 

...如果這個代碼是要保持周圍的東西,你應該真的考慮給功能更具描述性的名字...

+0

非常感謝!我認爲這是問題所在。我知道從我提供的內容來看很難做到,但是你能想出更有效的方法嗎?該列表擁有超過1000個元素,並且需要永久運行代碼。謝謝 – GstarDiesel

+2

@MillyVanilli - 好吧,更新你的問題,總體目標是什麼,以及FUN2的樣子! ...和一些示例數據也會很好。 – Tommy

+3

+1能夠從這些小信息中找出答案。 –