2015-11-28 3 views
1

Я пытаюсь создать выходной вектор цикла, содержащий результат из каждого цикла.Выходной вектор функции цикла r

out=NULL 
for (i in 1:5) { 
out<-cbind(out,sample(1:100, 1)) #placeholderfunction 
for (i in 1:5) {out[i]<- i+1} 
} 

Хорошая сторона: Мой результат содержит правильные значения. Плохая сторона: это как матрица, и я не знаю, почему.

> out 
    out    
[1,] 2 71 14 46 96 
[2,] 3 71 14 46 96 
[3,] 4 71 14 46 96 
[4,] 5 71 14 46 96 
[5,] 6 71 14 46 96 

Что я хочу бы что-то вроде:

> out 
    out    
[1,] 2 71 14 46 96 

Вероятно, это всего лишь небольшой шаг от того, где я стою, но я просто не сможешь понять это, может быть, кто-то может помочь? (и да, я мог бы просто удалить, но я бы хотел, чтобы мой код был чистым)

Спасибо!

Хорошо, , глядя на эту проблему еще раз по этой шкале я нашел это - лишняя строка:

> out=NULL 
> for (i in 1:5) { 
+ out<-cbind(out,sample(1:100, 1)) 
+ } 
> out 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 63 98 78 43 19 
+2

растет вектор в цикле плохая практика (как петли в г в целом). Почему бы не сделать 'out <- numeric (5)' then' out [i] <- sample (1: 100, 1) 'внутри цикла. Или, 'out <- sample (1: 100, 5, replace = TRUE)' – jeremycg

+0

Спасибо за советы по циклам, хотя я получил проблему, что то, что я назвал функцией здесь (по соображениям простоты), на самом деле является моделирование множественных рандомизированных наборов данных для определения точности алгоритма (и я все еще новичок). Я буду читать здесь, на петлях в R, спасибо за упоминание! –

+1

В способе, которым вы используете это (как вектор, а не матрицу), вы должны использовать 'c()' вместо 'cbind()'. ** Однако **, послушайте совет jeremycg о «растущем» объекте - он разрушает производительность и может сделать простой код длительным. – Gregor

ответ

-1

Что об этом

out <- sample(100,5) 

Update

Я вижу почему я получил -1, OP хочет построить вектор с циклом for. В качестве предостережения создание вектора таким образом обычно не является хорошей идеей. Например, мой код выше и быстрее, чем код OP. Это выдерживая, если вы хотите сгенерировать вектор случайных чисел с для цикла использования такого подхода

my.loop <- function(l){ 
    out_1 <- numeric(l) 
    for (i in 1:l) { 
     out_1[i] <- sample(1:100, 1) 
    } 
    out_1 
} 

Это будет гораздо лучше, чем оп подход ниже, потому что мы память предварительным выделения.

op.loop <- function(l){ 
    out_2 = NULL 
    for (i in 1:l) { 
     out_2 <- cbind(out_2, sample(1:100, 1)) 
    } 
    out_2 
} 

Для удовольствия я приурочены два подхода:

enter image description here