【问题标题】:Looping through a Vector循环通过向量
【发布时间】:2015-08-12 19:28:59
【问题描述】:

我正在使用 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 所需的迭代次数?任何帮助,将不胜感激。

【问题讨论】:

    标签: arrays r loops vector while-loop


    【解决方案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
    

    【讨论】:

    • 或者修改为data.frame(x=2:10, iters=lengths(sapply(2:10, t5))-1)
    猜你喜欢
    • 2023-03-30
    • 2021-12-01
    • 1970-01-01
    • 2020-10-25
    • 2020-04-07
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多