2015-03-05 2 views
0

У меня есть выход из модели, написанной в многоуровневый список. По существу, существует 5 переменных, и список создается таким образом, чтобы результаты для каждого сценария были идентифицированы значениями переменных в этом сценарии. Таким образом, результаты прогона с K = 0,5, C = 0,9, V = 0,5, R = 0,25 и RV = 0 можно получить поИзвлечение информации из многоуровневых списков - R

results$`K=0.05`$`C=0.9`$`V=0.5`$`R=0.25`$`RV=0` 
1] FALSE FALSE FALSE FALSE FALSE 

Ниже приведен пример того, как полный выход может выглядеть:

results 
$`K=0.05` 
$`K=0.05`$`C=0.9` 
$`K=0.05`$`C=0.9`$`V=0.5` 
$`K=0.05`$`C=0.9`$`V=0.5`$`R=0.25` 
$`K=0.05`$`C=0.9`$`V=0.5`$`R=0.25`$`RV=0` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.05`$`C=0.9`$`V=0.5`$`R=0.25`$`RV=0.05` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.05`$`C=0.9`$`V=0.5`$`R=0.25`$`RV=0.1` 
[1] FALSE FALSE FALSE FALSE FALSE 




$`K=0.05`$`C=0.91` 
$`K=0.05`$`C=0.91`$`V=0.5` 
$`K=0.05`$`C=0.91`$`V=0.5`$`R=0.25` 
$`K=0.05`$`C=0.91`$`V=0.5`$`R=0.25`$`RV=0` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.05`$`C=0.91`$`V=0.5`$`R=0.25`$`RV=0.05` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.05`$`C=0.91`$`V=0.5`$`R=0.25`$`RV=0.1` 
[1] FALSE FALSE FALSE FALSE FALSE 




$`K=0.05`$`C=0.92` 
$`K=0.05`$`C=0.92`$`V=0.5` 
$`K=0.05`$`C=0.92`$`V=0.5`$`R=0.25` 
$`K=0.05`$`C=0.92`$`V=0.5`$`R=0.25`$`RV=0` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.05`$`C=0.92`$`V=0.5`$`R=0.25`$`RV=0.05` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.05`$`C=0.92`$`V=0.5`$`R=0.25`$`RV=0.1` 
[1] FALSE FALSE FALSE FALSE FALSE 





$`K=0.1` 
$`K=0.1`$`C=0.9` 
$`K=0.1`$`C=0.9`$`V=0.5` 
$`K=0.1`$`C=0.9`$`V=0.5`$`R=0.25` 
$`K=0.1`$`C=0.9`$`V=0.5`$`R=0.25`$`RV=0` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.1`$`C=0.9`$`V=0.5`$`R=0.25`$`RV=0.05` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.1`$`C=0.9`$`V=0.5`$`R=0.25`$`RV=0.1` 
[1] FALSE FALSE FALSE FALSE FALSE 




$`K=0.1`$`C=0.91` 
$`K=0.1`$`C=0.91`$`V=0.5` 
$`K=0.1`$`C=0.91`$`V=0.5`$`R=0.25` 
$`K=0.1`$`C=0.91`$`V=0.5`$`R=0.25`$`RV=0` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.1`$`C=0.91`$`V=0.5`$`R=0.25`$`RV=0.05` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.1`$`C=0.91`$`V=0.5`$`R=0.25`$`RV=0.1` 
[1] FALSE FALSE FALSE FALSE FALSE 




$`K=0.1`$`C=0.92` 
$`K=0.1`$`C=0.92`$`V=0.5` 
$`K=0.1`$`C=0.92`$`V=0.5`$`R=0.25` 
$`K=0.1`$`C=0.92`$`V=0.5`$`R=0.25`$`RV=0` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.1`$`C=0.92`$`V=0.5`$`R=0.25`$`RV=0.05` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.1`$`C=0.92`$`V=0.5`$`R=0.25`$`RV=0.1` 
[1] FALSE FALSE FALSE FALSE FALSE 





$`K=0.15` 
$`K=0.15`$`C=0.9` 
$`K=0.15`$`C=0.9`$`V=0.5` 
$`K=0.15`$`C=0.9`$`V=0.5`$`R=0.25` 
$`K=0.15`$`C=0.9`$`V=0.5`$`R=0.25`$`RV=0` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.15`$`C=0.9`$`V=0.5`$`R=0.25`$`RV=0.05` 
[1] FALSE TRUE FALSE FALSE FALSE 

$`K=0.15`$`C=0.9`$`V=0.5`$`R=0.25`$`RV=0.1` 
[1] FALSE FALSE FALSE FALSE FALSE 




$`K=0.15`$`C=0.91` 
$`K=0.15`$`C=0.91`$`V=0.5` 
$`K=0.15`$`C=0.91`$`V=0.5`$`R=0.25` 
$`K=0.15`$`C=0.91`$`V=0.5`$`R=0.25`$`RV=0` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.15`$`C=0.91`$`V=0.5`$`R=0.25`$`RV=0.05` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.15`$`C=0.91`$`V=0.5`$`R=0.25`$`RV=0.1` 
[1] TRUE FALSE FALSE FALSE FALSE 




$`K=0.15`$`C=0.92` 
$`K=0.15`$`C=0.92`$`V=0.5` 
$`K=0.15`$`C=0.92`$`V=0.5`$`R=0.25` 
$`K=0.15`$`C=0.92`$`V=0.5`$`R=0.25`$`RV=0` 
[1] FALSE FALSE TRUE FALSE FALSE 

$`K=0.15`$`C=0.92`$`V=0.5`$`R=0.25`$`RV=0.05` 
[1] FALSE FALSE FALSE FALSE FALSE 

$`K=0.15`$`C=0.92`$`V=0.5`$`R=0.25`$`RV=0.1` 
[1] FALSE FALSE FALSE FALSE FALSE 

Для анализа я хотел бы иметь возможность извлекать результаты из всех сценариев с определенными значениями переменных. Например, я хотел бы извлечь результаты сценариев с C = 0.92 и RV = 0.1 (или любой комбинацией, действительно).

Что-то вроде:

results$*$'C=0.92'$*$*$'RV=0.1' 

или

results[*]['C=0.92'][*][*]['RV=0.1'] 

Я прочитал подобный вопрос относительно wildcards, что я не думаю, что R использует, что не совсем туда, куда мне нужно было его идти. Какие-либо предложения?

Cheers!

ответ

3

Вы действительно должны хранить свои данные в кадре данных или некоторых таких. Я понимаю, что рекурсивная структура удобна, когда вы выполняете тесты в циклах, но все же. К счастью, есть функция, которая может сделать перевод:

lst <- list(a=list(b=list(c0=list(d0=1:3, e0=4:6), c1=list(d1=7:9, e1=10:12)))) 
library(reshape2) 
DF <- melt(lst) 
subset(DF, grepl("1", L4)) # now we can use regular expressions against each list level 

Производит:

value L4 L3 L2 L1 
7  7 d1 c1 b a 
8  8 d1 c1 b a 
9  9 d1 c1 b a 
10 10 e1 c1 b a 
11 11 e1 c1 b a 
12 12 e1 c1 b a 

Вы можете посмотреть на DF, чтобы увидеть, что я делаю с подмножеством.

+0

Это может помочь - однако, у меня также есть аналогичный вывод, где вместо векторов логических элементов (как указано выше) каждый элемент списка является матрицей. Я сделаю снимок и посмотрю, что будет делать в этом случае melt() ... но может быть немного грязным. Тем не менее, для того, что я перечислял выше, ваше решение элегантно. +1 – Dan

+0

После того, как вы попробуете его с другим выходом, я думаю, что это путь. Спасибо за вашу помощь! Хранение вывода в списках во время цикла является самым простым, но преобразование в расплавленный блок данных значительно облегчает анализ. Благодаря! – Dan

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