2015-12-22 6 views
0

Я ищу оптимальную практику для хранения нескольких векторных результатов оценки, выполненных с несколькими различными значениями. В настоящее время мой рабочий код делает это:Метод в [R] для массивов данных фреймов

q <- 55 
value <- c(0.95, 0.99, 0.995) 
a <- rep(0,q) # Just initialize the vector 
b <- rep(0,q) # Just initialize the vector 
for(j in 1:length(value)){ 
    for(i in 1:q){ 
    a[i]<-rnorm(1, i, value[j]) # just as an example function 
    b[i]<-rnorm(1, i, value[j]) # just as an example function 
    } 
    df[j] <- data.frame(a,b) 
} 

Я пытаюсь найти лучший способ для хранения индивидуальных а и Ь для каждого уровня значения

  • Чтобы иметь возможность перебирать переменное «значение» позже для построения графика
  • чтобы иметь значение переменной «значение» и/или его описание доступных
+1

Я думаю, что непонятно, что вы ищете. Во-первых, 'value' не содержит' levels', поэтому, пожалуйста, будьте осторожны с используемой вами терминологией. Во-вторых, вы вообще не используете data.frames. В-третьих, если вы просто хотите применить функцию к элементам 'a' и' b', вы можете использовать 'sapply'. – iled

+0

Извините за значение по сравнению с уровнями, я составил его, а затем понял, что R использует уровни в качестве ключевого слова и пытался его изменить. –

+0

Я использовал rnorm (1, i, значение [j]) в качестве заполнителя для более сложного набора вычислений, которые не являются (imho) применимыми к этому вопросу. То, что я пытаюсь достичь, - это создать объект, который будет содержать данные для всех трех наборов данных рассчитанных значений. Этот объект будет передан в функции отчетности для создания графиков, в которых я нуждаюсь. –

ответ

2

Я не совсем уверен, что вы пытаетесь сделать, так что дайте мне знать, если это это то, что y Оуре ищет.

q = 55 
value <- c(sd95=0.95, sd99=0.99, sd995=0.995) 

a = sapply(value, function(v) { 
    rnorm(q, 1:q, v) 
}) 

В приведенном выше коде мы избегаем внутреннего цикла путем векторизации. Например, rnorm(55, 1:55, 0.95) даст вам 55 случайных нормальных девиаций, первый из которых будет выбран из распределения со средним значением = 1, второй из распределения со средним значением = 2 и т. Д. Кроме того, вам не нужно инициализировать a.

sapply занимает место внешнего контура. Он применяет функцию к каждому значению в value и возвращает три вектора случайных ничьих в качестве кадра данных a. Я добавил имена к значениям в value, а sapply использует их как имена столбцов в результирующем фрейме данных a. (Было бы больше стандарта, чтобы сделать value список, а не вектор названными элементами. Вы можете сделать это с value <- list(sd95=0.95, sd99=0.99, sd995=0.995) и код будет иначе работать так же.)

Вы можете создать кадры несколько данных и хранить их в список выглядит следующим образом:

q <- list(a=10, b=20) 
value <- list(sd95=0.95, sd99=0.99, sd995=0.995) 

df.list = sapply(q, function(i) { 
    sapply(value, function(v) { 
     rnorm(i, 1:i, v) 
    }) 
    }) 

на этот раз мы имеем два различных значения для q и мы обернуть sapply код сверху внутри другого вызова sapply. Внутренний sapply делает то же самое, что и раньше, но теперь он получает значение q от внешнего sapply (используя переменную макета i). Мы создаем два кадра данных: один - a, а другой - b. a имеет 10 строк и b имеет 20 (из-за значений, которые мы установили в q). Оба кадра данных хранятся в списке с именем df.list.

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