2016-11-15 33 views
0

修改矢量I中R.就地中的R

> participant 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 

我使用的函數「修改」改變這個向量的內容具有一個矢量「參與者」。

modify <- function(x){ 
    for (i in participant){ 
    if (x[i] > 12) 
     (x[i]=x[i]-12) 
     print (x[i]) 
}} 

當我作爲modify(參與者)運行函數時,它運行正常,但矢量參與者的元素保持不變。

任何建議,我哪裏錯了?

+1

我將與'參與者去[參與者> 12] < - 參與者[參與者> 12] - 12' –

回答

1

你的問題是函數返回。使用此解決方案,因此該函數返回修飾的載體x

modify <- function(x){ 
    for (i in participant){ 
    if (x[i] > 12) 
     (x[i] = x[i] - 12) 
     print (x[i])} 
    return(x) 
    } 

participant <- modify(participant) 

另一種解決方案是ifelse功能:

participant <- ifelse(participant > 12, participant - 12, participant) 
5

不要使用循環。

participant <- participant - (participant > 12) * 12 

如果你堅持要用你的函數,環比指數,讓你的函數返回修改後的載體,併爲其分配:

modify <- function(x){ 
    for (i in seq_along(participant)){ 
     if (x[i] > 12) x[i]=x[i]-12 
    } 
    return(x) 
} 

participant <- modify(participant) 

當然,循環是比較難寫,也慢得多。