循环通过矢量

时间:2015-05-29 19:46:37

标签: arrays r loops vector while-loop

我正在使用Rstudio并尝试创建一个循环遍历向量并使用while条件执行计算的函数。然后,该函数应该返回一个数据框,其中输入的向量在一列中,并且为了满足另一列中的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 个答案:

答案 0 :(得分: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