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

Posted

技术标签:

【中文标题】“递归索引在级别 4 失败”R 代码【英文标题】:"Recursive indexing failed at level 4" R code 【发布时间】:2019-03-12 00:37:49 【问题描述】:

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

【问题讨论】:

【参考方案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)

以上是关于“递归索引在级别 4 失败”R 代码的主要内容,如果未能解决你的问题,请参考以下文章

高效完成R代码

R验证源代码

r语言qqplot怎么编程代码

r语言中怎样查看函数源代码

三元相图怎么看怎么画(附R代码示例)

R - 加密/锁定R代码和包[重复]