【问题标题】:index number of nested lapply嵌套 lapply 的索引号
【发布时间】:2017-12-14 17:38:33
【问题描述】:

我试图了解如何通过 2 个列表访问嵌套 lapply 函数的外部迭代索引。

虚拟案例:假设我在这里有 2 个项目的列表,以及 3 个项目的列表,并使用嵌套 lapply 来制作变量 item1_x、item1_y、item1_z 等。 在我正在处理的代码中,我尝试访问可以使用 parent.frame()$i[] 为内部 lapply 执行的迭代索引,但是如何访问外部迭代索引?

目标:我想在代码通过外部 lapply 时打印 1、2 当代码通过内部 lapply 时打印 1, 2, 3 因此也可以打印外部索引乘以内部索引,即 1,2,3,4,5,6

我一直在寻找与 parent.frame()$i[] 类似的代码片段来访问外部迭代索引(如果存在),也是为了更好地理解它是如何工作的,但老实说,任何其他解决方案都会很好课程

mylist <- c("item1", "item2")

  lapply(mylist, function(y) {
         lapply(c("x", "y", "z"), function(x) {
            print(parent.frame()$i[])
### access index number of outer lapply here somehow. 
###   index 1 * index 2 should be giving a print(...) of 1:6 than...

        })})

【问题讨论】:

  • 你能给出一个更清楚的例子来说明你希望函数的输出是什么吗?我不明白这里的目标是什么。
  • 伪代码对我们几乎没有帮助。开发一个实际可重现的示例。
  • Parfait,这段代码完全可以重现。这与我的真实代码之间的唯一区别是 mylist 的名称及其内容,在 lapply 循环中,我正在尝试构建闪亮的 UI 按钮,该按钮将从 6 个名称的列表中获取标签,因此我正在寻找一种从输出 1,2 (outer lapply) x 1,2,3 (inner) 获取输出 1, 2, 3, 4, 5, 6 的方法但是在这个问题上添加闪亮的代码会使它变得非常不必要过于复杂

标签: r nested lapply


【解决方案1】:

这里有几种方法

使用mapply

mapply(function(y, z) {
                lapply(c("x", "y", "z"), function(x) {
                                            print(paste(y, x))
                                            print(z)
                                        })
        }, 
        mylist, 
        seq_along(mylist))

或者只有lapply

lapply(seq_along(mylist),   function(y) {
                                lapply(c("x", "y", "z"), function(x) {
                                                            print(paste(mylist[y], x))
                                                        })
                            })

【讨论】:

    猜你喜欢
    • 2017-11-23
    • 1970-01-01
    • 2011-05-18
    • 2020-06-19
    • 2015-04-26
    • 2014-01-21
    • 2012-04-08
    • 2010-11-30
    • 2018-05-07
    相关资源
    最近更新 更多