“递归索引在级别4失败” R代码

时间:2018-10-06 21:55:27

标签: r dataframe indexing outer-join

我有一个名为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()函数。

2 个答案:

答案 0 :(得分:0)

为什么不只是:

print(PDay)

或者,如果目标是使用其他功能,则可以两次套用:

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

答案 1 :(得分:0)

为了使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) )