将值存储在R中具有未知深度的嵌套列表中

时间:2016-12-15 18:50:57

标签: r list nested

我正在尝试优化计算密集型的代码,因为它处理80个元素集的子集。

我想加速的关键步骤是查找我的循环中的当前子集是否已被处理。目前,我检查这个子集是否包含在已经处理的相同大小的子集k(基数)中。将逐步处理的子集存储在嵌套列表中以检查子集是否已经被处理(O(1)而不是O中的搜索(80选择k))会快得多。

我编写一个函数来检查当前子集是否在我的已处理子集的嵌套列表中没有问题:access(treated, subset=c(2,5,3)) iff treated[[2]][[5]][[3]]==TRUE

返回TRUE

但是,我不知道如何在我的循环中存储我当前的子集在被处理的列表中。我想这样的事情是可能的:treated[h] <- TRUE其中h是我当前的子集(在上面的例子中:h=c(2,5,3)

我面临的主要问题是&#34; [[..]]&#34;在我的循环内变化。我是否有任何其他选项而不是完成h以使其长度为80并且将序列设置为80&#34; [[..]]&#34;,如:treated[[h[1]]][[h[2]]]...[[h[80]]] <- TRUE

1 个答案:

答案 0 :(得分:2)

如果h是值的向量,那么

<h1 id="tableTitle"></h1>
    <div style="overflow-x: auto; white-space: nowrap; height:305px">
    <table id="render_${pluginId}" border="1" style="width: 100%" class="testRunTable">
        <tr>
            <th id="tableHeader">Test Types</th>
            <th id="tableHeader"># of Tests</th>
            <th id="tableHeader"># of Approved <br> Test Designs</br></th>
            <th id="tableHeader"># Executed</th>
            <th id="tableHeader"># Passed</th>
            <th id="tableHeader">% Executed</th>
            <th id="tableHeader">% Passing <br> (of Executed)</th>
            <th id="tableHeader"># Blocked</th>
            <th id="tableHeader"># Failed</th>
            <th id="tableHeader"># Defects<br> Opened</br> </th>
            <th id="tableHeader"># Defects<br> Resolved</br></th>
            <th id="tableHeader"># Technical<br> Debt</br> </th>
        </tr>
    </table>
    </div>

以递归方式对列表项进行子集化。 例如,我创建了一个(不是那么高)嵌套列表:

"[["(treated, h)

以下命令正确递归地将项目子集应用于列表:

> a
[[1]]
[[1]][[1]]
[1] 2

[[1]][[2]]
[[1]][[2]][[1]]
[1] 3

[[2]]
[1] 1

递归子集化向量的长度可以在不固定[[..]]的数量的情况下变化。例如,使用相同的语法对两个深度级别进行子集化:

> "[["(a, c(1,2,1))
[1] 3