2014-02-12 50 views
0

我對這樣一個簡單的問題感到啞巴,但我似乎無法找到辦法,儘管我確信有很多方法。解釋我的問題最簡單的方法可能是展示一個例子,我有一些我想要應用的程序。如何獲得一個循環不覆蓋結果?

FUN<- function(v1, v2, v3){ 
    n=length(v1) 
    res <- vector() 
    for (i in 1:n){ 
    if(v1[i]>v2[i]) (res[i] <- v3[i+2]) 
     else(res[i] <- v1[i+2])} 
    return(res)} 

的輸入是兩個矢量和矩陣,全部爲相同的長度

matrix <- matrix(runif(30),ncol=3) 
v2 <- runif(10) 
v3 <- rnorm(10) 

這樣當我運行循環的一個包括函數我可以i次,每次執行程序輸出到矩陣中的不同列。我已經嘗試過類似幾個類似的「版本」,但沒有運氣。

for (i in 1:3)(
r <- matrix() 
r[re,i] <- re <- FUN(matrix[,i], v2, v3)) 

任何人都可以幫我嗎?

+0

你在'FUN循環'用'n'元素訪問元素'n + 1'和'n + 2'的矢量 - 這是一個錯字嗎? – josliber

+0

矩陣'r'中沒有'i'列,它是一個空矩陣。此外,在for()位後面需要括號'{...}',如'for(){....}',而不是括號。 –

+0

除此之外,您每次都在循環中創建一個新矩陣! – Baumann

回答

1
r <- matrix(ncol=3, nrow=10) 
for (i in 1:3) { 
    r[,i] <- FUN(matrix[,i], v2, v3) 
} 

聲明你的矩陣在循環外面,並且每循環迭代只填寫一列。

(假設FUN是正確的;即使是,也有更好的方法做它與其他的方法可以做到你想超過一個循環其他什麼)