从多级列表中提取信息 - R

Extracting information from multi-level lists - R

我已将模型的输出写入多级列表。本质上,有 5 个变量,并且构建列表以便每个场景的结果由该场景中的变量值标识。因此 运行 K=0.5、C=0.9、V=0.5、R=0.25 和 RV = 0 的结果可以通过

访问
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 没有使用它,它没有达到我需要它去的地方。有什么建议吗?

干杯!

您确实应该将数据存储在数据框或类似的东西中。我知道当你在循环中进行 运行 测试时,递归结构很方便,但仍然如此。幸运的是有一个函数可以做翻译:

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 以了解我对子集所做的工作。