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