2013-05-25 3 views
1

на основе предложения Роланда от Plot titles in R using sapply(). Я создал следующий цикл, чтобы сделать ящики из каждой выбранной переменной в моем наборе данных.вывод из цикла «for»

all.box=function(x) { 
    for (i in seq_along(x)) { 
    boxplot(x[,i], main = names(x)[i]) 
    } 
} 

Это прекрасно работает, поскольку оно обеспечивает графики. Может ли кто-нибудь указать мне, как заставить цикл возвращать некоторый результат, скажем, $ out из boxplot, чтобы иметь возможность видеть количество вычисленных им выбросов?

Thanx много!

+1

Я согласен с @agstudy, если вы хотите, чтобы вернуть результат, это более удобно использовать '* apply' или' foreach' петли, чем создание 'for' цикл, чтобы сделать это эффективно. Я предложил цикл 'for', потому что вы утверждали, что хотите заговоры и ничего не говорили о возврате чего-либо еще. – Roland

ответ

3

Использование lapply здесь лучше, чтобы избежать побочного эффекта for:

all.box=function(x) { 
    res <- lapply(seq_along(x),function(i){ 
    boxplot(x[,i], main = names(x)[i])$out 
    }) 
    res 
} 

PS: вы можете продолжать использовать for, но вам нужно будет либо добавить список в результате в вашем цикле или для выделения памяти для выходного объекта перед вызовом boxplot. Поэтому я думаю, что здесь проще использовать функцию xxapply.

+0

Это действительно имеет смысл. Спасибо! – jakub

1

Если вы хотите что-то вернуть из цикла for, очень важно предварительно выделить объект возврата, если это не список. В противном случае петли for с множеством итераций будут медленными. Предлагаю прочитать, в частности, R inferno и Circle 2.

all.box=function(x) { 
    result <- list() 
    for (i in seq_along(x)) { 
    result[[i]] <- boxplot(x[,i], main = names(x)[i])$out 
    } 
    result 
} 
+0

Я скачал книгу, она кажется информативной. Благодаря! – jakub

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