2015-05-29 81 views
2

我正在使用Rstudio並嘗試創建一個函數,該函數將通過矢量循環並執行一段時間條件的計算。然後該函數應該返回一個數據框,其中輸入的矢量在一列中,並且爲了滿足另一列中的while條件而需要的迭代次數。 我已經創建了一個函數,它使用while條件執行計算,該條件用作我遇到問題的函數的基本操作。那就是:通過矢量循環

t5<-function(x){ 
z=x 
    while(x != 1){ 
     if(x %% 2 == 0) 
      x= x/2 
     else x= (3 * x +1) 

     z=c(z, x) 
} 

return (z) 
} 

這裏是我有什麼新功能?我的問題函數(T7):

t7<-function(x){ 
y=0 
i=0 
for(i in 1:length(x)){ 
y[i]=length(t5(x[i]))-1 
print(y[i]) 

} 
#m<-data.frame(x, y[i]) 
} 

我有它打印值Y [i],因爲這是唯一的函數做某事的方式。這裏是它顯示輸出(這只是我所需要的一半):

 t7(2:10) 
    [1] 1 
    [1] 7 
    [1] 2 
    [1] 5 
    [1] 8 
    [1] 16 
    [1] 3 
    [1] 19 
    [1] 6 

任何人可以幫助我瞭解如何使T7(2:10)通過這個陣列上運行,並返回一個數據幀列出陣列以及爲數組中的每個數字達到數字1所需的迭代次數?任何幫助,將不勝感激。

回答

1

可以得到所需要與sapply函數的向量:

data.frame(x=2:10, iters=sapply(2:10, function(x) length(t5(x))-1)) 
# x iters 
# 1 2  1 
# 2 3  7 
# 3 4  2 
# 4 5  5 
# 5 6  8 
# 6 7 16 
# 7 8  3 
# 8 9 19 
# 9 10  6 
+0

或其修飾是'data.frame(X = 2:10,iters =長度(sapply(2:10,T5)) -1)' – akrun