2015-05-29 4 views
2

Я использую 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]) 
} 

У меня было напечатать у [я], потому что это единственный так что функция что-то делает. вот выход он показывает (что только половина того, что мне нужно):

 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 (х = 2: 10, Iters длина = (sapply (2:10, t5)) -1) ' – akrun

Смежные вопросы