【问题标题】:"Recursive indexing failed at level 4" R code“递归索引在级别 4 失败”R 代码
【发布时间】:2026-02-05 23:50:01
【问题描述】:

我有一个名为 PDay 的列表,其中包含 3 个子列表。每个子列表包含 6 个数据帧。 为了打印每个数据帧( PDay[[1]][[1]], PDay[[1]][[2]] ,...),我编写了以下代码:

    A<-seq_len(3)
    B<-seq_len(6)
    F1<-function(x,y){
      PDay[[y]][[x]]
    }
    c(outer(B,A,F1))

这是我的错误: "递归索引在第 4 级失败"

我的代码有什么问题?怎么改?

谢谢

编辑:请不要嵌套循环。只是 external() 函数。

【问题讨论】:

    标签: r dataframe indexing outer-join


    【解决方案1】:

    为什么不只是:

    print(PDay)
    

    或者,如果目标是使用不同的功能,您可以双重申请:

    lapply(PDay, function(x) lapply(x, print))
    

    【讨论】:

      【解决方案2】:

      为了使outer 成功,需要有一个至少在 x 中矢量化的函数。 "[[" 函数不能用于传递矢量化结果。此方法已在您指定的较小示例上进行了测试,但应该足够通用:

      F1<-function(x,y){
             print( PDay[[y]][[x]] )
           }
       VF1 <- Vectorize(F1)
       outer(B,A,VF1)
      

      当您运行它时,您会注意到您首先会看到数据帧的打印结果,然后是列表矩阵。如果您希望抑制该矩阵结果,您可以将其分配给一个名称,作为对外部调用的一部分(使用 VF1 函数仅用于打印副作用),然后是 rm(the_name)

        junk_name=outer(B,A,VF1)
        rm(junk_name)
      

      在获得打印副作用的同时抑制outer 的输出的另一种方法是使用invisible 函数:

       invisible( outer(B,A,VF1) )
      

      【讨论】:

      • 你能告诉我你想如何用代码来抑制矩阵吗?
      • 谢谢,但是我尝试使用 invisible 但它给了我错误:
      • dim(robj)
      • 好像还有一个矩阵。为什么会这样?
      • 发帖dput(PDay)