2014-12-11 2 views
0

У меня есть список матриц/вектор и вы хотите применить R-функции и сохранить вывод в виде списка в последовательности чисел. В качестве примера утра: У меня есть вектор х и хотел бы calcualte мин, макс, медиана, квантиль и хранить его в списке каждой итерации,перебрать список в R и сохранить список

outlist <- vector("list", 10) 

for(p in seq(from=5, to=50, by=5)) { 

    x <- c(rnorm(20)) 

    min <- min(x) 
    max <- max(x) 
    median <- median(x) 
    quant <- quantile(x) 

    outlist[[p]] <- list(c(min=min,max=max,median=median,quant=quant)) 

    print(p) 
    } 

Код выше работает отлично, за исключением того, что на выходе и имеет множество «нулевых» значений. См. Ниже для выхода из вышеприведенной программы, обратите внимание, что 1-й по 4 является нулевым и только на 5-й итерации мы начинаем получать вывод списка. Это повторяется для всей итерации. Не могли бы вы сообщить мне, как я должен избегать нулевых значений в выходе.

Ниже приведены мои вопросы. Как обеспечить, чтобы все нулевые значения отсутствовали и присутствовали только порядковые номера (p = 5,10,15, ..., 50) на итерации.

Кроме того, как создать выход матрицы (вектор) для списка с именем строки в качестве примера последовательности?

 min  max  median quant.0% quant.25% quant.50% quant.75% quant.100% 
5 -2.1058435 2.8461767 -0.5227028 -2.1058435 -1.1500056 -0.5227028 0.1645680 2.8461767 
10 -0.7709128 2.2872216 0.1808006 -0.7709128 -0.1501660 0.1808006 0.8250730 2.2872216 
15 -2.3748713 2.0360717 0.2638579 -2.3748713 -0.2631081 0.2638579 0.6446657 2.0360717 

and so on ... 

Благодаря

+1

Ну, если вы только назначаете предметы с индексом кратных 5, что вы ожидали. Научитесь использовать 'seq_along' для генерации индекса, если хотите« плотные »значения. ' –

+0

Вы просто хотите удалить NULL? 'Фильтр (Negate (is.null), outlist)' или вы хотите суммарную статистику для каждой итерации? Если последний, почему у вас будет цикл только каждые 5-й итерации? – rawr

ответ

1

Вы можете построить список с помощью foreach пакета. Функция foreach вернет вам список, и впоследствии вы можете назначить его имена.

library(foreach) 

vectorNames <- seq(from=5, to=50, by=5) 

outlist <- foreach(p = vectorNames) %do% { 

    x <- c(rnorm(20)) 

    min <- min(x) 
    max <- max(x) 
    median <- median(x) 
    quant <- quantile(x) 

    return(c(min=min,max=max,median=median,quant=quant)) 
} 

names(outlist) <- vectorNames 

Затем вы можете создать матрицу, используя do.call и rbind.

outmatrix <- do.call(rbind, outlist) 
outmatrix 
Смежные вопросы